利用 mod_pagespeed 实现极速

让 Google 加速您的网站

mod_pagespeed 是 Google 为 Apache HTTP 服务器提供的一种模块,能够改进您的网站的页面加载时间。它能以编程形式自动地将高速网站的所有最佳实践整合到您的网站之中,而且只需进行极少的配置。利用 mod_pagespeed,Apache web 托管商将能够快速而又轻松地加快网站速度。

Michael Abernethy, 程序员, Freelance

Mike AbernethyMichael Abernethy 运用广泛的技术为多种客户提供服务。他主要致力于打造更出色、更先进的 Web 应用程序、测试其运行的浏览器的极限,同时尝试了解如何使 Web 应用程序更易于创建和维护。不在计算机旁工作时,他通常会带孩子玩出游玩或者读书。



2012 年 3 月 12 日

简介

先决条件

要使用 mod_pagespeed,您需要安装可在 Linux 上运行的 Apache 2.2 版本,32 位或 64 位均可,同时安装 mod_deflate 模块。

目前,mod_pagespeed 不支持 Windows 或旧版本的 Apache(根据他们的文档和常见问题解答来看,我认为近期他们不会为这些版本提供支持)。

来自 Google 的 mod_pagespeed Apache 模块被设计为一种 “插入式” 模块,可供 Apache Web 托管商插入其服务器安装,并立即实现页面加载速度的显著提高。如果您还不确定如何加速您的网站,或者尚未优化您的配置性能,那么此模块就应该是您寻找已久的解决方案。举例来说,对于使用开箱即用配置与安装的 Wordpress 博主,此模块能带来很大的改变。

mod_pagespeed 模块在一个模块中结合了优化页面加载速度的最佳实践,并且可自动执行所有必要的步骤。

速度的定义

无论您的 Internet 连接速度如何,您总是希望能够更快地加载您的网页。将页面内容发送给您的 Web 服务器也希望它的速度更快,原因有二:如果企业的服务器速度缓慢,就会导致客户丢失。此外,如果企业为您提供了更快的个别页面加载速度,那么就能将其自己的服务器用于为其他人提供更多页面。您可能每天访问他们的页面一次,但他们每天要为其他客户提供 100,000 次相同的页面。对于这些企业来说,即便是细微的速度提升也有着重大的意义。

就本文的目的而言,我们将从用户的视角定义 “速度”:页面加载时间。能够迅速加载的网页将被视为快速,如 www.google.com,其页面加载时间非常短。相反,如果某个假象站点仅有一台服务器,运行在陈旧的 Pentium II 600 MHz 之上,而且包含 40 个庞大的镜像文件,那么这个站点无疑会非常慢,其页面加载时间非常长。此外,如果一个网页在每天仅有少数人访问时速度较快,在数千名用户都在 10 分钟的时间内访问该网站时,该网站仍然有可能变得极为缓慢。因此,“速度” 定义为使您从 A 点到 B 点所用的时间,其中 A 点 = 您在地址栏中键入某些内容之后按下 “回车键” 的时候,而 B 点 = 页面完全载入浏览器的时间。

从 Web 服务器的角度来看,提高速度(而无需更改硬件)的最佳方法就是更快地发送更少量的数据。更具体地来说,您希望降低机器的延迟(延迟 = 响应时间),并减小传输的数据大小(所传输的数据的物理 Kb 数)。因此,为了 “加速” 一个网站,无论是从 Web 服务的视角,还是从用户的视角来说,您都需要减少服务器的延迟,同时减小所传输的数据大小。

如何提高速度

提高网站速度的全部可行战术可分为五大类:最大化缓存、最小化查找、最小化每条请求的开销、最小化数据大小,以及优化浏览器的呈现。请注意,各分类描述极限行为的方式,例如 “最大化” 或 “最小化”,举例来说,不存在 “打开” 或者 “关闭” 一种特性或者设置的简单解决方案。下面我们来详解各分类,并说明其工作方式。

最大化缓存

浏览器能够在本地缓存文件,因此不必在每次载入页面时从服务器载入这些文件,而是可以使用本地副本。尽管这对于动态 Web 页面本身意义不大(例如博客页面),但对于已经载入页面的全部图像、CSS 文件和 JavaScript 文件来说又会如何呢?这些文件基本不会更改,即便更改,也是非常少的。不必每一次都去服务器中获取相同的 CSS 文件,特别是在为整个站点使用一个 CSS 文件时。用户载入的所有页面均使用相同的 CSS 文件,因此您完全可以使用本地缓存的副本,而不必使用服务器副本,因为它们是完全相同的。

浏览器实际上会接受服务器提供的缓存命令。服务器可以告知浏览器项目是否有效、在多长时间内保持有效。服务器可以将这些命令附加到每一个文件。因此,服务器调用告知浏览器缓存一个 JS 文件、一个 CSS 文件、一个 JPG 文件,但不缓存 HTML 文件或者 TXT 文件。此外,也可以告知浏览器 “CSS 和 JPG 文件在一年内不会过期”。浏览器将解释这些命令,因为服务器告诉它 “这里有一个 JPG 文件,它在一年之内不会发生更改,在此期间,如果我的服务器上的任何页面引用了这个文件,那么您就应该使用本地副本”。

最小化查找

在任意类型的文件从服务器发送至浏览器时,都存在在各文件上建立 HTTP 连接的相关开销。换句话说,需要为各文件在服务器与浏览器之间建立一个通信信道。在大多数常见网站中,有数十个文件需要传输,每次存在这样的开销时,服务器都要花费一定的时间来建立连接。因此,减少查找数量可以减少服务器用于建立连接的时间。

实现此目标的主要方法应该显而易见:减少一个网页上需要传输的文件数量。例如,如果您的一个页面中包含 10 幅图像,那么您就可能需要建立 10 个 HTTP 连接。但您可以将资源整合到数量更少的文件之中,从而减少连接数量,例如将所有 jQuery 插件置于一个文件之中,或者将一个页面中的所有小图像并为一个大的图像文件,随后使用 CSS,仅显示大图像中您需要显示的部分。

最小化每条请求的开销

载入各网页时,浏览器会将某些信息中继至服务器,包括 cookie 以及调用 POST 和 GET 的时间等内容。当然,这需要花费时间,因为每次载入页面时,都必须从客户端向服务器上传 cookie 信息。某些网站会在 cookie 中存储大量信息,需要上传的信息越多,所花费的时间就越长。

更为可取的设计是在 cookie 中存储尽可能少的信息(例如,仅存储用户 ID),并使用这样的信息作为关键字,查找您在数据库中存储的所有必要信息。这能显著缩短此类信息的上传时间。

最小化数据大小

传送 20Kb 的图像文件要比传送 200Kb 的图像文件更快。这个分类包含所有这些相关实践:例如,尽可能使用 GIF 而非 JPG、最大限度地缩小 JavaScript 文件的大小、尽可能发送缩略图图像而非整个图像。

优化浏览器呈现

这个分类是极有挑战性的。其中包含诸如使用优化的 CSS 选取器等实践,但您的站点往往已经完成了设计,而处理 CSS 文件的人员往往不是负责优化服务器性能的人员。此外,这个分类中的要素提供的收益往往并不明显。

理论介绍到此为止,下面让我们来下载并运行产品!无论如何,这种插件的目的在于插入您自己的 Apache 安装,使您不必 再担心提升速度的所有细节。

下载、安装和配置 mod_pagespeed

下载程序包(下面的 参考资料 部分中提供了一个链接),运行恰当的 Linux 命令来将其安装到您的系统之中。

将 mod_pagespeed 安装到 Linux 系统中后,它尚未与您的 Apache 安装相关联。下面我们来关联它。安装完成后,为了简化后面的工作,我建议您将 "pagespeed.conf" 文件从安装位置复制到 Apache 的 “conf” 目录中。同时将 "mod_pagespeed.so" 文件复制到 Apache 的 "modules" 目录中。最后,创建您希望存储缓存和模块将生成的文件的目录,我将其分别命名为 “cache” 和 “files”。

接下来,我们需要告知 Apache 使用 mod_pagespeed 模块,为此,我们需要编辑 http.conf 文件。请将以下代码行添加到该文件的末尾处:

清单 1. 修改 Apache 的 http.conf 文件
 Include "{your-path-to-this-file}/pagespeed.conf"

接下来,我们需要对 pagespeed.conf 略作修改,使其指向我们的文件和目录的正确目录:

清单 2. 修改 pagespeed.conf 文件
# at line 1 of the file
LoadModule pagespeed_module {your-path-to-this-file}/mod_pagespeed.so

# down at line 25-26 in the file
ModPagespeedFileCachePath "{your-'cache'-file-path-here}"
ModPagespeedGeneratedFilePrefix "{your-'files'-file-path-here}"

最后,启动您的 Apache 服务器。


测试您的 mod_pagespeed 安装

通过几项检查来确保您的 mod_pagespeed 安装工作正常。显然,首先要确保您的 Apache 能正常启动(如果无法正常启动,那么就表示您的 mod_pagespeed 安装/配置存在问题)。随后,检查 “cache” 文件夹,确认 mod_pagespeed 正确写入此处。

现在,访问您正在处理的站点的一个网页(这个网页中应该包含类似于 JS 和 CSS 文件等内容)。访问页面后,检查 “cache” 文件夹。您应在这里看到一些文件,它们应该是可收缩的文件(JS 和 CSS 文件)的 GZipped/压缩版本。这是表明您已正确安装和配置 mod_pagespeed 的第一项证明。

最后一项检查是您从服务器获得的响应标头 (response header)。您可以使用 Firebug 或 Google 自己的 Page Speed 等工具来进行这项检查,甚至可以编写 PHP 代码来查找此标头。在检查响应标头时,请查找对 “Modpagespeed” 的引用,因为 Google 的工具会标记此响应。

祝贺您!成功检查 “cache” 文件夹和响应标头之后,即可确信您已经正确安装和配置了 mod_pagespeed。


试用 mod_pagespeed

如果您希望在正式使用之前首先试用一下 mod_pagespeed,可以按照上述步骤进行操作,并在准备好激活之前关闭 pagespeed.conf 文件中的模块。(无需撤销 Apache http.conf 文件中的配置设置。)只需关闭和启动 pagespeed.conf 文件本身之中的 mod_pagespeed 即可;查找第 10 行中的 ModPagespeed on 参数。要使此项变更生效,您需要回退或重启 Apache。


结束语

大多数网站管理员都深知速度和页面加载时间的重要意义,但很少有网站管理员是监视统计信息和最大加载时间的专业 Linux 极客 (geek)。对于大多数网站管理员来说,像 mod_pagespeed 这样的简单工具正是他们的理想选择,这些工具易于安装,几乎无需配置,并且能够极大地为您用户改进页面加载时间。

参考资料

学习

获得产品和技术

讨论

  • 参与论坛讨论
  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=801490
ArticleTitle=利用 mod_pagespeed 实现极速
publish-date=03122012