Yahoo性能中心总结的高性能网站设计的规则
YSlow是yahoo美国开发的一个页面评分插件,分析页面的不足,指导改进和优化。
-----------------------------------------------------------------------
『Yslow安装说明』
1.下载FireFox的Add-inYslow(自己可以找,更安全)
2.安装完成后重启FF,可以看到右下角有Yslow的图标,点击图标,再点击弹出框里的Preformance标签,可以看到有对网站的评分
-----------------------------------------------------------------------
主要有12条:
1.MakefewerHTTPrequests尽可能少的http请求
其中JS请求,CSS请求,CSSbackgroundimages请求,如果这3项加载的过多,对页面加载的非常不利,但纯img请求,并没有列为不利因素
一般情况下页面上只会出现一个JS和一个CSS(对JS的封装得有一定的要求)。
一般页面上的ICON,栏目背景啊,图片按钮啊,我们都会用图片CSS背景来实现,而一般这个图片CSS背景用到的图片都是比较小的,所以完全可以把这些图片合并成一个相对比较大的图片,这样页面上只会出现一个CSSbackgroundimages请求,最多也就2-3个。后来仔细看了下雅虎美国的页面,他们的确也是这样做的,虽然这样做需要花一定的时间来有规则的合并这些ICON,栏目背景,图片按钮,以方便CSS调用,但是这样做绝对是合算的,而且是有必要的,YSlow也是极力推荐的。
2.UseaCDNCDN的全称是ContentDeliveryNetwork,即内容分发网络
其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。
据说SA明年会做几个点的CND。
3.AddanExpiresheader设置过期的HTTPHeader.
设置ExpiresHeader可以将脚本,样式表,图片,Flash等缓存在浏览器的Cache中.
设置过期的HTTPHeader更应该做在脚本,样式表,Flash上.
4.Gzipcomponents对页面内容进行Gzip格式的压缩
Gzip格式是一种很普遍的压缩技术,几乎所有的浏览器都有解压Gzip格式的能力,而且它可以压缩的比例非常大,一般压缩率为85%,就是说服务器端100K的页面可以压缩到25K左右的Gzip格式的数据发给客户端,客户端收到Gzip格式的数据后自动解压缩后显示页面。
如果外部链接,例如(有外部的广告投放JS,这个JS说拥有的网站是没有做过GZIP优化)也会连累了自身网站
5.PutCSSatthetop把CSS外部链接放到页面的顶部
其实这个原则我们一般都遵守的,如果把CSS外部链接作为逻辑的一部分出现在页面头部以下,这个本身就是个错误。WEB前端工程师有义务杜绝这些不合理的产品逻辑破坏我们的页面结果及页面加载速度,不能为了实现而实现。
6.PutJSatthebottom把Javascript脚本尽量放到页面底部加载。
一开始为以为Javascript脚本尽量放到页面底部加载,是指所有的JS脚本都要放到底部,后来才发现,并不完全是这样,这里所指的脚本是指那些在加载过程中要执行的脚本,所以一般的处理办法还是页面头部引入JS链接,页面底部执行JS脚本程序。为了实现最大的下载并行,页面加载初期做的事,最好只有下载,HTML的下载,CSS的下载,JS的下载,等下载完成后再去实现页面渲染,JS脚本运行。
7.AvoidCSSexpressions避免CSS表达式
其实在CSS中运行表达式和页面加载中运行大量的JS脚本差不多,或许还更慢,而且还不兼容,虽然可以使我们在页面逻辑简单不少,但是我们完全可以抛弃之。
9.ReduceDNSlookups尽可能少的DNS查找。
一般不要超过4个。不过这个主要是服务器架构上的问题,一个主域名,一个图片的,一个STYLE的,最多加上IFREAM的刚好4个。
10.MinifyJS对Javascript代码进行压缩。
一个不错的压缩工具,yuicompressor,雅虎美国开发的JAVA压缩包yuicompressor.jar。压缩的相当完美,不仅把代码间的空格换行给去除掉了,而且对变量名,北部方法名都进行的简化,无意中实现了混淆脚本的作用。
对JS合并,进行压缩
一套是压缩前的(调试用的),一套是压缩后(发布到网上的),且要保证2套代码一致。
所以最完美的做法是在发布的时候实现JS脚本合并,并对其用yuicompressor进行压缩,然后发布到网上,把关键点移到发布的时候,这样我们只需要关心一套JS脚本(发布前的版本)。
11.Avoidredirects避免重定向(跳转)
经常遇到的一种做法,注册成功后,旺旺会有一个页面提示“你已经注册成功,3秒后将自动跳转到XX页面”。
还有一种常见的链接,
http://www.google.com或者
http://www.google.com/,他们的区别很大!
服务器如果接收到的URL是http://www.google.com,它会自动重新定向到http://www.google.com/,虽然最后都打开了google的首页,
但是前者比后者多走了一步,重定向,所以加URL链接的时候,别忘了把最后的“/”给加上去。
12.Removeduplicatescripts去除重复的脚本
不仅要做到一个页面脚本不重复,而且要做到N个页面,脚本要重用。
13.ConfigureETags好像是服务器端配置的问题
YAHOO的官方说明,好像还有一个AJAXCACHE(AJAX缓存)。
随着我们AJAX应用的广泛,AJAX缓存这个概念一定有,AJAX是个好东西,但是重复的数据,无休止的向后台申请,绝对是个错误(不仅是速度上还是对服务器压力上来说),所以就要对我们已经申请到的数据进行缓存,当第2次用到的时候,就直接从缓存中取,不要再去访问服务器资源了。这个思想不仅仅适合AJAX,在所有有数据复用的应用中都应该考虑到。