关于性能优化的法则

规则1:减少HTTP请求

我们只有20%的时间花在所请求的HTML页面上,剩下的80%是发生在浏览器前端,特别是页面和页面中各种元素(图片、CSS、Javascript、 flash…)的下载之上。

图片技术,CSSsprite,内联图片和脚本,样式表的合并,这些技术既可以减少HTTP请求,又可以避免在性能和设计之间进行艰难的选择。

规则2:使用内容发布网络

内容发布网络(CDN)是一组分布在多个不同地理位置的web服务器,用于更加有效的向用户发布内容。

除了缩短时间之外,CDN还可以带来其他优势。他们的服务包括备份,扩展存储能力和进行缓存。CDN还有助于缓和web流量峰值压力,比如在获取天气或股市新闻,浏览流行的体育或娱乐事件时。

规则3:增加Expires header

现在的WEB页面都包含了大量的组件,并且其数量在不断增长,页面的初访者会进行很多的HTTP请求,但通过使用一个长久的Expires头,让这些组件被缓存,这会在后续的页面浏览中避免不必要的HTTP请求。长久的Expires头常用于图片,但应该用在所有的组件上,包括脚本,样式表。

规则4:压缩组件

如果http产生的响应包很小,传输时间就会很少,因为只需要很小的包从服务器传递到客户端。压缩响应包,并由此减少网络的响应时间,这是减少页面大小的最简单的技术,但影响是最大的。

规则5:将样式表放在顶部

规则6:将脚本放在底部

规则7:避免CSS表达式

表达式的问题在于对其求职的频率比人们期望的要高。它们不只在页面呈现和大小改变时求值,当页面滚动,甚至用户鼠标在页面上移动过时都要求值。

规则8:使用外部Javascript和css

规则9:减少DNS查找

当客户端的DNS缓存为空时,DNS查找的数量与web页面中唯一的主机名数量相等。也就是说,减少唯一的主机名的数量就可以减少DNS查找的数量。减少唯一的主机名数量会潜在的减少页面中并行下载的数量。避免DNS查找降低了响应时间,但减少并下载可能会增加响应时间。

规则10:精简JavaScript

精简是从代码中移除不必要的字符以减少其大小,进而改善加载时间的实践。在代码被精简后,所有的注释以及不必要的空白字符都将被移除,这可以改善响应时间的效率

规则11:避免重定向
    除了在header中人为的重定向之外,网页重定向常在不经意间发生,被重定向的内容将不会使用浏览器的缓存。比如用户在访问www.xxx.com,服务器会通过301转向到www.xxx.com/,在后面加了一个“/”。如果服务器的配置不好,这也会给服务器带来额外的负担。通过配置apache的 alias或使用mod_rewrite模块等方法,可以避免不必要的重定向。

规则12 :移除重复脚本

规则13:配置ETag

使用gzip来压缩网页中的静态内容,能够显著减少用户访问网页时的等待时间(据说可达到60%)。主流的web服务器都支持或提供gzip压缩,如果使用apache服务器,只需要在配置文件中开启 mod_gzip(apache1.x)或mod_deflate(apache2.x)即可。凡是静态的页面,使用gzip压缩都能够显著提高服务器效率并减少带宽支出,注意图片内容本身已经是压缩格式了,务必不要再进行压缩。

规则14:使Ajax可缓存