Best Practices for Speeding Up Your Web Site
原文:
http://developer.yahoo.com/performance/rules.html#page-nav
优化网站性能 提高网站速度访问速度的14条实践
http://www.phpv.net/html/1660.html
Minimize HTTP Requests 减少HTTP请求次数
80/20法则:http://yuiblog.com/blog/2006/11/28/performance-research-part-1/
当浏览一个页面的时候,浏览器花费80%的时间在获取外联的js,CSS,Image等等。
l Combined files:
每个页面包含的每个引用文件都需要一次HTTP请求。
最佳实践:尽可能把文件组合,例如把一个页面需要的多个js(css)文件整合到一个js(css)文件,甚至对某些访问量大的页面,直接把js和css放在页面中,而不单独做外部链接。
l CSS Sprites:
将多个image合并成一个大的image,通过CSS来控制大image的位置和展示方式,例如使用backgroud image 和background position来得到自己所需的那部分image。
中文介绍:http://oncoding.net/rebuild/css/article200904/150.html
l Image maps:
和CSS Sprites有点类似,image maps更多的是把相邻的image组合成一个大的image.
l Inline images:
把image嵌入页面中data:
URL scheme,从而减少访问image的HTTP请求,但是会增加页面的大小。而且不是所有的浏览器都支持。
Use a Content Delivery Network 使用内容分发网络
A content delivery network (CDN) is a collection of web servers distributed across multiple locations to deliver content more efficiently to users. The server selected for delivering content to a specific user is typically based on a measure of network proximity. For example, the server with the fewest network hops or the server with the quickest response time is chosen.
内容分发网络:在网络中部署节点服务器,用户访问的时候,选择最佳节点服务器。
具体介绍:http://baike.baidu.com/view/21895.htm
Add an Expires or a Cache-Control Header设置缓存时间
Browsers (and proxies) use a cache to reduce the number and size of HTTP requests, making web pages load faster. A web server uses the Expires header in the HTTP response to tell the client how long a component can be cached.
通过缓存可以减少HTTP请求次数。
l For static components: implement "Never expire" policy by setting far future Expires header
l For dynamic components: use an appropriate Cache-Control header to help the browser with conditional requests.
对不同的组件,设置不同的缓存时间。
Gzip Components GIZP压缩
目前绝大多数的浏览器都支持gzip,所以可以将网站使用的所有文本内容JS, CSS, HTML, JSP, PHP, XML等均采用gzip压缩,提高传输速度(相应速度)。
Put Stylesheets at the Top 样式表放在页面上方
将CSS样式表放在页面上方<HEAD>里。
Css层叠样式表,后面的可能会覆盖前面的样式,浏览器为了避免重绘页面,所以只有当所有CSS载入完成后,才展现页面。
Put Scripts at the Bottum 脚本文件放在页面最后
Avoid CSS Expressions 避免CSS表达式
Make JavaScript and CSS External Javascript和CSS外联
这一点和减少HTTP请求看起来冲突,但是如果有cache的话,外联的Javascript和CSS文件HTTP请求问题可以得到解决,而且外联后页面的大小会减少。此外,外联便于维护。
Reduce DNS Lookups 减少DNS查询
DNS查询会花20-120ms,页面中应尽量少造成DNS查询。
例如页面中包含很多广告。
Minify JavaScript and CSS 压缩Javascript和CSS
减少Javascript和CSS文件的大小。
前面也提到了由于浏览器都支持压缩传输,所以可以先用GZIP压缩,在用其他的工具压缩(例如去掉空格,替换函数名等)
工具: JSMin and YUI Compressor
在线工具:http://dean.edwards.name/packer/
Avoid Redirects 避免重定向
每次重定向都会增加一次HTTP请求。
Remove Duplicate Scripts 移除重复脚本
减少HTTP请求,减少页面大小,便于维护。
Configure Etags 配置Etags标签
客户端得缓存有可能不是最新的,通过在Server端配置Etags标签来标记当前客客户的缓存是否是最新的。
具体过程如下
1. 客户端请求一个页面(A)。
2. 服务器返回页面A,并在给A加上一个ETag。
3. 客户端展现该页面,并将页面连同ETag一起缓存。
4. 客户再次请求页面A,并将上次请求时服务器返回的ETag一起传递给服务器。
5. 服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体。