项目的开发者基本上是Google的工程师,这里需要提到的一个人:Steve Souders 。他曾经效力于Yahoo,是YSlow 项目的开发者之一,而且还是Firebug Work Group 成员之一。他一直以来致力于高性能Web 应用领域。更加有趣的是,在Stanford CS系就开了这么一门课:High Performance Web Sites (CS193H) 。另外,他还写了两本书,都在O’reilly出版,分别是High Performance Web Sites 与 Even Faster Web Sites。
Page Speed是Firefox 的扩展,准确地说是Firebug的扩展。Firebug的强大功能我已经介绍过了 ,Page Speed就是对其进行了进一步扩展,集成的功能包括:
首先,需要安装Firebug,然后在这里 进行安装。基本要求如下:
安装好以后,打开Firebug,可以看到新增的两个标签页:Page Speed与Page Speed Activity,如下图所示:
其中,Page Speed标签页包括两个功能:Analyze Performance与Show Resources,其中Analyze Performance是Page Speed的核心功能。点击以后Page Speed开始工作,几秒钟以后就会得出一份详细的性能分析报告:
其中各项按照重要性进行排序,展开每一部分,可以得到详细的报告。其中,红色图标表示未进行优化,黄色表示可以进行进一步优化,绿色表示已经进行优化。
其余部分的功能可以在Google Code的官方主页上 找到,这里就不赘述了,只重点介绍Analyze Performance这一功能。
其实上图的每一项都是Page Speed提供的优化标准,Page Speed就是按照这一条条标准进行分析的。需要拿出来讲的包括:
这里放在第一,是性能优化效果最显著的一步。所谓gzip压缩是一种开发的压缩算法,目前的主流浏览器(Firefox , Safari, Chrome, IE4及以上)与主流服务器 (Apache, Lighttpd, Nginx)均对其有很好的支持。gzip压缩是通过HTTP 1.1协议中的Content-Encoding : gzip来进行标记说明,其可以明显减少文本文件的大小,从而节省带宽和加载时间。我做过的一个实验,发现启用gzip后,jquery 1.2.6 minify版本的大小从54.4k减少到16k,减少了70%。gzip适用的情况包括:
关于各服务器如何启用gzip,可以参加相关文档说明。
如何检查gzip是否启用?使用Firebug,在Net模块中进行检查HTTP Header是否有Content-Encoding gzip标记,参见下图:
对于文件本身具有非常大的优化空间。所谓压缩,就是通过一些工具将函数、变量名进行优化(其实就是尽可能 缩短变量名长度),消除多余字符(比如空格、换行符、注释等),最终得到的代码可以在分析和执行上得到性能提升。压缩后得到的代码对于机器而言是可读的, 对于人来说就不行了,因为文件内容已经面目全非。所以压缩一般用于生产期的代码,不能使用于开发期。
同样的道理,图片内容中也有一定的冗余信息,比如文件头部的一些内容描述(这些内容在jpg)图片上尤其如此。通过一定的工具(比如GIMP)可以去除这些信息,从而节省一定的空间。
幸运的是,Page Speed已经内置了这些功能,我们不需要找第三方的工具。如下图所示,可以看到对JS文件进行最小化可以得到的预期效果:
比如jquery.form.js,最小化后减少11.9kb,减少54.8%的空间。点击minified version,在新窗口中可以看到Page Speed为你优化好的版本,直接更新到服务器就可以了。
关于图片优化,操作方法同上。
这是经常使用的方法。当请求的资源在浏览器本地得到缓存后,第二次请求这些内容就可以从直接缓存中取出,减少了连线的HTTP请求。
HTTP 1.1提供的缓存方法主要有两种:
关于各缓存头部的设置可以参考各服务器的相关文档。
通常浏览器在解析HTML时遇到JS文件会先下载,解析执行后才会下载后面的内容,期间自然会造成一定的延时。为了提高性能,尽可能将JS文件的位 置后移,如果可能,还可以通过部分代码进行异步加载。另外,对于JS和CSS在必须放置在一起情况,需要报JS放置在CSS之后,这样CSS与JS文件可 以同步下载。
这里主要包括JS/CSS等文本文件和图片。对于文本文件,尽可能将同一类型放置到一个文件中,减少HTTP请求。对于CSS背景图片,可以使用 Sprit技术将图片拼接到一起,然后使用background-position属性选择对应的图片。Google首页上的这个图片就是一个很好的例 子:
更多优化规则,可以参考Page Speed的说明 以及Steve Souders 个人主页上的相关信息。
虽然现在网络速度越来越快,Web 前端优化仍然非常重要;永远不要假设用户的网络速度和你一样快,毕竟由于ISP的各方面原因,各地的速度大不相同。良好的策略可以在有限的带宽资源下达到最大的性能发挥。