转:网站前端性能优化

继前面几篇文章后再来说说老生常谈的话题,怎么样提升前端性能。文中很多取材自网络及《High
Performance Web Sites》,并根据自己工作中所接触到的知识整理而成。

1. 减少HTTP请求

终端用户响应时间80%消耗在前端,而大部分时间都是在下载页面的资源:图片,脚本,flash等等,减少请求资源简化页面设计成为了性能提升的关键。尽量合并CSS、JS及图片文件,减少HTTP请求。

2. 使用内容分发机制

使用内容分发如CDN加速,使用户从离自己最近的服务器下载文件。但一般要求减少DNS查询次数,如同一个页面的请求资源尽量少的使用不同的主机名,可以减少网站并行下载的数量。但很多网站为了加速下载资源特意用了多个主机名,这样可以并行下载资源。在低版本的浏览器IE6,7中并行连接数为4个,高版本的IE8及以上以及现在较新版的chrome,firefox等浏览器都是6个。一般CSS,JS及图片资源均通过CDN加速,并且使用多个主机名来实现并行下载。

3. 设置header的过期时间,使内容可以缓存

这个规则可以从两个方面来看:

对于静态组件,实现“永不过期”的政策,通过设置一个较长时间的Expires头,例如图片,flash;

对于动态组件:使用适当的Cache-Control头来处理不同的请求,如CSS,JS等。

对于第一次访问网站的用户来说,图片资源等都是固定不变的,设置为永不过期的Expires头可以在客户端缓存,减少服务端的负载以及请求数量,而JS,CSS资源可以设置一个适当的过期时间。

但是实际上我们会遇到一个挑战:如果版本更新导致原来的CSS或JS有改动,如何确保终端用户是下载的最新的资源文件呢?

最最常用的一种方法,就是每次有改动时生成一个tag然后加在文件名称中,如果有修改文件名就会不一致,客户端就会强制获取最新的资源文件,amazon,google等都是这么处理的;当然还有一种办法就是在资源文件目录上打上tag,但是有一种弊端就是对于没有更改的文件客户端也会重新下载对应的资源,如果对于发布较为频繁的web项目,用户在首次访问时就比较耗性能。

4. 使用Gzip压缩内容

服务端可以把不只是html还有JS,CSS,XML等一切文本的响应都进行压缩,减小传输的大小

5. 样式放在页头

用户在打开一个页面时,浏览器会逐步的加载头部,导航栏及logo等,在加载过程中用户能看到页面的反馈,提升了用户体验。如果样式放在页脚,带来的问题是,包括在IE的很多浏览器上禁止逐步呈现,他们会阻止渲染,避免页面样式变化而引起重绘页面元素,用户就只能看到一个空白页。

6. JavaScript放在页脚

相对于CSS而言,JS提倡放在页脚加载避免阻碍其他资源的并行下载,对于内容性质的网站,将内容的HTML放在相对靠前的位置,而对于交互较多的网页,需要把特别重要的核心组件的JS剥离往前放,而不太重要的则在最后加载。更详细的关于Javascript的加载请查看上一篇文章:《从两个bug来看网页内容的装载》

7. 避免使用CSS表达式

CSS表达式计算会非常频繁,不仅仅是在渲染和resize时会执行,滚动页面甚至移动鼠标都会重新计算。

8. 外部引用JavaScript和CSS

如果通过引用外部JavaScript和CSS的形式,因为浏览器会缓存这些资源,下次访问时可以使得页面加载更快,而如果将它们写在HTML中每次访问页面时都会再次加载。

9. 减少DNS查询

这点与第2点有相似之处,需要做的就是在减少DNS查询次数与并发下载之间做好平衡。

10. 精简JavaScript和CSS

删除JS和CSS中的空白换行,注释等,使用混淆把JS中的长变量换成短变量,可以缩小他们的体积,减少请求数据所占用的网络带宽.

11. 避免重定向

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

12. 删除重复的脚本

在页面中重复的脚本会增加性能压力,美国20%的热门网站中都包含有重复的脚本,团队规模和脚本数量增加了出现重复脚本的几率。在IE中,包含重复的JS脚本会导致浏览器的缓存不被使用,同时增加不必要的请求(仅在IE,FF下不会出现重复的请求)和重复的脚本执行(在IE和FF下都会重复执行)。

13. 配置ETags

ETag是一种服务器和浏览器用于识别请求的浏览器已缓存的资源是否与服务端匹配的机制,比last-modified更灵活,能更加精确的知道文件是否被修改过,因为If-Modified-Since只能检查秒级的修改,而ETag是一个唯一的字符串,不会受到修改时间的限制。

顺便说说浏览器访问URL时的工作机制:

a. 第一次访问url时,用户从服务器段获取页面内容,并把相关的文件(images,css,js…)放在高速缓存中,也会把文件头中的expired
time,last modified, ETags等相关信息也一同保留下来。

b.
用户重复访问url时,浏览器首先看高速缓存中是否有本站同名的文件,如果有,则检查文件的过期时间;如果尚未过期,则直接从缓存中读取文件,不再访问服务器。

c. 如果缓存中文件的过期时间不存在或已超出,则浏览器会访问服务器获取文件的头信息,检查last
modifed或ETags等信息,如果发现本地缓存中的文件在上次访问后没被修改,则使用本地缓存中的文件;如果修改过,则从服务器上获取最新版本。

14. 使Ajax可缓存

Ajax如果使用POST请求的话,浏览器通常会假定用户是提交数据给服务端的,所以自然不会缓存,因为有数据提交就意味着服务端要所处理,而get形式的Ajax请求却可以缓存,如果对安全性没有特别高要求的可以使用get形式的Ajax请求。

15. 减少DOM节点,加速页面渲染

16. 避免404错误

17. 减少Cookie的大小,静态资源使用无cookie的域,客户端请求它们的时候,减少 Cookie
的反复传输对主域名的影响。Yahoo!使用yimg.com,YouTube使用ytimg.com.Amazon使用images-amazon.com

18.
避免频繁操作DOM节点,过多的操作还可能导致浏览器死机,据说之前twitter就因为在windows.scroll事件的操作中绑定了过多的dom操作而导致浏览器死机

19. 用LINK而不用@import方式导入样式

20. 给图片加上正确的宽高值,以减少页面重绘,同时可以防止图片缩放

21.
缩小favicon.ico并缓存,很多时候开发者都会忽略这个文件,但是每当有用户收藏网站/网页时,浏览器会自动请求这个文件,就算这个图标文件没有在你的网页中明显说明,浏览器也会请求,如果不添加就会出现404.

使用工具:

目前有一些工具可以用来做性能分析,并依据以上法则给出优化建议,值得我们使用,常见的工具如下:

Yslow: 雅虎针对前端网站优化提出了23条准则,同时开发了网页性能分析浏览器插件;

PageSpeed:是google推出的性能分析工具

dynaTrace: 是基于IE的分析工具

时间: 2024-11-08 02:59:51

转:网站前端性能优化的相关文章

[转载]网站前端性能优化之javascript和css——网站性能优化

之前看过Yahoo团队写的一篇关于网站性能优化的文章,文章是2010年左右写的,虽然有点老,但是很多方面还是很有借鉴意义的.关于css的性能优化,他提到了如下几点: CSS性能优化 1.把样式表置于顶部 现把样式表放到文档的< head />内部似乎会加快页面的下载速度.这是因为把样式表放到< head />内会使页面有步骤的加载显示. 注重性能的前端服务器往往希望页面有秩序地加载.同时,我们也希望浏览器把已经接收到内容尽可能显示出来.这对于拥有较多内容的页面和网速较慢的用户来说特

网站前端性能优化

继前面几篇文章后再来说说老生常谈的话题,怎么样提升前端性能.文中很多取材自网络及<High Performance Web Sites>,并根据自己工作中所接触到的知识整理而成. http://hovertree.com/menu/webfront/ 1. 减少HTTP请求 终端用户响应时间80%消耗在前端,而大部分时间都是在下载页面的资源:图片,脚本,flash等等,减少请求资源简化页面设计成为了性能提升的关键.尽量合并CSS.JS及图片文件,减少HTTP请求. 2. 使用内容分发机制 使用

【转】网站前端性能优化之javascript和css

之前看过Yahoo团队写的一篇关于网站性能优化的文章,文章是2010年左右写的,虽然有点老,但是很多方面还是很有借鉴意义的.关于css的性能优化,他提到了如下几点: CSS性能优化 1.把样式表置于顶部 现把样式表放到文档的< head />内部似乎会加快页面的下载速度.这是因为把样式表放到< head />内会使页面有步骤的加载显示. 注重性能的前端服务器往往希望页面有秩序地加载.同时,我们也希望浏览器把已经接收到内容尽可能显示出来.这对于拥有较多内容的页面和网速较慢的用 户来说

大型网站--前端性能优化和规范

Web性能涉及的范围太广,但一般web开发者在程序上线以后很多都曾遇到过性能的问题.普遍表现为页面速度开始急剧变慢,正常访问时间变的很长,或则干脆给你抛出异常错误页面.这里会涉及到很多可能发生的情况,举例几个最主要发生的情况: * 数据库连接超过最大限制,一般表现为程序的连接池满,拒绝了与数据库的连接. * 数据库死锁 * Web Server 超过最大连接数(一般在虚拟主机上才会限制) * 内存泄漏 * Http连接数太多,即访问量超过了机器和软件设计正常所能提供的服务 而今天分享的主要是比较

转:网站前端性能优化总结

一.服务器侧优化 1. 添加 Expires 或 Cache-Control 信息头 某些经常使用到.并且不会经常做改动的图片(banner.logo等等).静态文件(登录首页.说明文档等)可以设置较长的有效期(expiration date),这些HTTP头向客户端表明了文档的有效性和持久性.如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取.接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新. 各个容器都有针对的方案,,以 Apache 为例: Ex

网站前端性能优化总结【转】

一.服务器侧优化 1. 添加 Expires 或 Cache-Control 信息头  某些经常使用到.并且不会经常做改动的图片(banner.logo等等).静态文件(登录首页.说明文档等)可以设置较长的有效期 (expiration date),这些HTTP头向客户端表明了文档的有效性和持久性.如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取.接着,客户端考察缓存 中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新. 各个容器都有针对的方案,,以 Apache 为例:

网站前端性能优化总结

一.服务器侧优化 1. 添加 Expires 或 Cache-Control 信息头  某些经常使用到.并且不会经常做改动的图片(banner.logo等等).静态文件(登录首页.说明文档等)可以设置较长的有效期(expiration date),这些HTTP头向客户端表明了文档的有效性和持久性.如果有缓存,文档就可以从缓存(除已经过期)而不是从服务器读取.接着,客户端考察缓存中的副本,看看是否过期或者失效,以决定是否必须从服务器获得更新. 各个容器都有针对的方案,,以 Apache 为例: E

网站前段性能优化总结

网站前端性能优化总结 作者: wireless_tech  发布时间: 2011-09-16 20:07  阅读: 2496 次  推荐: 0   原文链接   [收藏] 一.服务器侧优化 1. 添加 Expires 或 Cache-Control 信息头  某些经常使用到.并且不会经常做改动的图片(banner.logo等等).静态文件(登录首页.说明文档等)可以设置较长的有效期(expiration date),这些HTTP头向客户端表明了文档的有效性和持久性.如果有缓存,文档就可以从缓存(

HTML5前端(移动端网站)性能优化指南

HTML5是一种最新发布网页构架的普遍模型,是构建对程序.对用户都更有价值的数据驱动的Web的前端技术框架,它的价值在于融合CSS/javaScript/flash等众多前端开发技术,更多的体现在对交互的理解和视觉设计的还原上. HTML5框架可以提升网站的访问速度,通过优化前端将响应时间加快,使用户的等待时间减少,所谓前端是指在客户端通过浏览器发送了一个请求,除去后台系 统用户请求.执行数据查询并对结果进行组织所需要处理消耗的时间,在涌现的新技术中,JavaScript和一套新的API纯脚本技