MyException - 我的异常网
当前位置:我的异常网» Web前端 » 影响网页加载速度的要素

影响网页加载速度的要素

www.MyException.Cn  网友分享于:2015-08-26  浏览:4次
影响网页加载速度的因素

一个网站的加载速度是用户体验是否良好的最直观因素,所以通过合理的方法对网页的加载速度进行优化是十分必要的,下图是Yahoo!的YSlow所指出的23个因素。

1、减少HTTP请求次数
一个页面的加载从开始到结束,其实大部分时间都消耗在下载页面元素(诸如HTML、CSS、Javascript、Flash、图片等)上。据统计,HTTP请求在无缓存情况下占去了40%到60%的响应时间,而每增加一个元素,网页的平均载入时间就会增加40ms(宽带)或250ms(窄带)。
减少HTTP请求次数的方法大致有以下3种:
a. 避免不必要的HTTP请求:
例如用CSS代替圆角图片。
b. 合并CSS、Javascript、图片文件:
将CSS、Javascript分别存储在一个大文件中加载,使用CSS Sprites(图片拼合技术)
c. 优化缓存:
以百度为例,首页的加载总共8.3KB,其中5.3KB来自缓存,可见合理使用缓存可以极大降低HTTP的请求次数。同时配合Expires和Etags,可以设置缓存的过期期限和检查客户端缓存和服务器端的数据是否匹配。
d. 尽量避免使用内联图像:
在(X)HTML页面中尽量少的通过img的src属性引入图片,尽可能将图片放置在CSS中。

2、使用CDN(内容分布网络)
CDN,即Content Delivery Network,其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络”边缘”,使用户可以就近取得所需的内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。但是CDN对于个人用户和小公司而言,成本较高,只能望尘莫及。

3、避免空的src和href链接

4、在http头部添加Expires
服务端设置Expires是为了告知客户端内容需要缓存多长时间,例如:

1
Expires: Thu, 15 Apr 2010 20:00:00 GMT //告知客户端准确的过期时间

如果你使用的是Apache服务器,可以使用ExpiresDefault来设定相对当前日期的过期时间,有点保质期的意味:

1
2
3
<FilesMatch "\.(gif|jpg|js|css)$">
ExpiresDefault "access plus 10 years"//告知客户端缓存10年后过期
</FilesMatch>

要切记,如果使用了Expires文件头,当缓存的内容需要改变时就必须改变文件名,Yahoo!给我们了一个非常好的建议:在文件名中加上版本号,如yahoo_2.0.6.js。

5、使用Gzip压缩文件内容
Gzip是目前最流行也是最有效的压缩方式,它需要服务端的支持,使用Gzip大概可以减少70%的响应规模,目前大约有90%通过浏览器传输的互联网交换支持gzip格式。

6、将样式表置于页面顶部

7、将Javascript置于页面底部

8、避免使用CSS Expression

9、外部引用CSS Style和Javascript
这么做的目的是为了使得CSS和Javascript能够在浏览器中缓存,如果不同的页面都用到的CSS在缓存之后就不会重复加载,同时也减少了HTTP的请求次数。

10、减少DNS的查找次数
当我们在浏览器中输入一个域名之后,会有20~120ms的时间将域名转换为对应的IP地址,减少域名的数目,就会减少DNS的查找次数,从而降低DNS解析所耗费的响应时间,但是每个域名有并行下载数的限制,所以依照Yahoo!的建议,我们可以使用2~4个域名来获取DNS解析时间和并行下载数的平衡。

11、压缩CSS和Javascript
众所周知,元素的体积越小,加载速度就越快,使用JSMin和YUI Compressor可以对Javascript进行很大程度的压缩,同时YUI Compressor还可以压缩CSS,YSlow还提供了一个Smush.it工具,它可以实现对页面中所有图片的无损压缩。

12、避免使用重定向(跳转)
用真实世界投射法分析,假如你需要到A城B店购买一样物品,但是当你到了之后发现,门上写着:“本店铺已搬迁至C城D店”,你会有什么感受?被骗了?崩溃了?放弃了?在网页的用户体验中也是一样的道理,使用重定向毫无疑问会在拖慢加载速度的同时也降低了用户的体验。

13、移除冗余的CSS和Javascript

14、配置Etags

15、让Ajax能够缓存

16、使用GET完成Ajax请求
Yahoo!Mail团队发现,当使用XMLHttpRequest时,浏览器中的POST方法是一个“两步走”的过程:首先发送文件头,然后才发送数据。因此使用GET最为恰当,因为它只需发送一个TCP包(除非你有很多 cookie)。IE中URL的最大长度为2K,因此如果你要发送一个超过2K的数据时就不能使用GET了。

17、减少DOM元素的数量
下边的代码可以很方便的获取页面中DOM元素的总数:

1
alert(document.getElementsByTagName('*').length);

那么多少个DOM元素算是多呢?Yahoo!主页是一个内容非常多的页面,但是它只使用了700个元素(HTML标签)。DOM元素的数量除了对页面的加载速度有影响之外,也影响对搜索引擎的友好程度,事实上,有些搜索引擎在读取一定量的字符之后就会停止解析剩余的HTML,从而漏掉重要的内容,因此减少DOM元素的数量,精简优化网页的结构对SEO也有着举足轻重的作用。

18、避免404错误

19、减小Cookie的体积

20、使用域名无关性的Cookie
如果我们之前为了增加并行下载数,单独设置了2~4个域名加载不同的页面元素,比如benben.cc为主域名,img.benben.cc加载图片元素(其实img.benben.cc依然是指向benben.cc/img),但是如果我们给benben.cc设置了cookie,那么所有对img.benben.cc的请求都会包含cookie,所以我们可以购买一个新的域名来单独存放静态内容,前提是不对该域名设置cookie,例如:Yahoo!使用的是 ymig.com,YouTube使用的是ytimg.com,Amazon使用的是images-anazon.com等等,如果不想这么做,也可以只对www主机头设置cookie来解决该问题。

21、避免使用Alpha滤镜

22、不要在HTML页面中缩放图片
我就有过这种表面看起来省时省力,其实却拖慢了加载速度的行为,我为了不在服务端对每个大图单独生成相应的缩略图,就在客户端对原始图片设置width和height从而实现缩略图的缩放,后来我发现这种行为会很大程度上影响一个页面从开始解析到完成加载的总时间。

23、使Favicon尽量小巧且可缓存
a. 文件尽量小巧,最好小于1Kb。
b. 合理设置缓存时间,如果你不想更改Favicon的默认名称,就把Expires设置为未来的几个月,当然,这个时间你可以根据你更换Favicon的频率动态掌握。

文章评论

编程语言是女人
编程语言是女人
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
旅行,写作,编程
旅行,写作,编程
代码女神横空出世
代码女神横空出世
如何成为一名黑客
如何成为一名黑客
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
一个程序员的时间管理
一个程序员的时间管理
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
鲜为人知的编程真相
鲜为人知的编程真相
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个调试和排错的小建议
10个调试和排错的小建议
 程序员的样子
程序员的样子
总结2014中国互联网十大段子
总结2014中国互联网十大段子
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
为什么程序员都是夜猫子
为什么程序员都是夜猫子
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
中美印日四国程序员比较
中美印日四国程序员比较
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员必看的十大电影
程序员必看的十大电影
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
Java程序员必看电影
Java程序员必看电影
程序员的鄙视链
程序员的鄙视链
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
我是如何打败拖延症的
我是如何打败拖延症的
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员和编码员之间的区别
程序员和编码员之间的区别
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员都该阅读的书
程序员都该阅读的书
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员应该关注的一些事儿
程序员应该关注的一些事儿
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
每天工作4小时的程序员
每天工作4小时的程序员
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
老程序员的下场
老程序员的下场
那些争议最大的编程观点
那些争议最大的编程观点
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
我的丈夫是个程序员
我的丈夫是个程序员
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有