2010-03-16
Google Code官方释出新项目:Google Page Speed。这个项目的理由也非常简单,因为Google是高性能Web应用的佼佼者,希望通过这个项目将Web前端优化的一些经验分享给整个社区。
项目的开发者基本上是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,可以看到新增的两个标签页:Page Speed与Page Speed Activity。
其中,Page Speed标签页包括两个功能:Analyze Performance与Show Resources,其中Analyze Performance是Page Speed的核心功能。点击以后Page Speed开始工作,几秒钟以后就会得出一份详细的性能分析报告。
其中各项按照重要性进行排序,展开每一部分,可以得到详细的报告。其中,红色图标表示未进行优化,黄色表示可以进行进一步优化,绿色表示已经进行优化。
其余部分的功能可以在Google Code的官方主页上找到,这里就不赘述了,只重点介绍Analyze Performance这一功能。
使用gzip压缩
这里放在第一,是性能优化效果最显著的一步。所谓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是否启用?使用Firebug,在Net模块中进行检查HTTP Header是否有Content-Encoding gzip标记。
最小化JS和图片
对于JavaScript文件本身具有非常大的优化空间。所谓JavaScript压缩,就是通过一些工具将函数、变量名进行优化(其实就是尽可能缩短变量名长度),消除多余字符(比如空格、换行符、注释等),最终得到的代码可以在分析和执行上得到性能提升。压缩后得到的代码对于机器而言是可读的,对于人来说就不行了,因为文件内容已经面目全非。所以压缩一般用于生产期的代码,不能使用于开发期。
同样的道理,图片内容中也有一定的冗余信息,比如文件头部的一些内容描述(这些内容在jpg)图片上尤其如此。通过一定的工具(比如GIMP)可以去除这些信息,从而节省一定的空间。
幸运的是,Page Speed已经内置了这些功能,我们不需要找第三方的工具。
比如jquery.form.js,最小化后减少11.9kb,减少54.8%的空间。点击minified version,在新窗口中可以看到Page Speed为你优化好的版本,直接更新到服务器就可以了。
启用浏览器缓存
这是经常使用的方法。当请求的资源在浏览器本地得到缓存后,第二次请求这些内容就可以从直接缓存中取出,减少了连线的HTTP请求。
HTTP 1.1提供的缓存方法主要有两种:
JavaScript延迟加载
通常浏览器在解析HTML时遇到JS文件会先下载,解析执行后才会下载后面的内容,期间自然会造成一定的延时。为了提高性能,尽可能将JS文件的位置后移,如果可能,还可以通过部分代码进行异步加载。另外,对于JS和CSS在必须放置在一起情况,需要报JS放置在CSS之后,这样CSS与JS文件可以同步下载。
文件拼接
这里主要包括JS/CSS等文本文件和图片。对于文本文件,尽可能将同一类型放置到一个文件中,减少HTTP请求。对于CSS背景图片,可以使用Sprit技术将图片拼接到一起,然后使用background-position属性选择对应的图片。Google首页上的这个图片就是一个很好的例子。
虽然现在网络速度越来越快,Web前端优化仍然非常重要;永远不要假设用户的网络速度和你一样快,毕竟由于ISP的各方面原因,各地的速度大不相同。良好的策略可以在有限的带宽资源下达到最大的性能发挥。
这个世界需要丰富的Web应用,更加需要高效的Web应用。