web前端性能优化的14个技巧     

 平时接触的很多优化都是后台程序或数据库级别的,最近浏览了下《高性能网站建设指南》,学习了下关于前端性能的优化技巧,在此总结下。

     一、web页面的性能分析
           性能黄金法则:只有10%~20%的最终用户响应时间花在了下载HTML文档上,其余的80%~90%时间花在了下载页面中的所有组件上。
          这里的组件包括js,图片,样式表,flash等

    二、具体优化规则:

        规则1:减少HTTP请求
                  具体措施:
                 1.图片地址(Image Map)——一张图片上点击不同的地方触发不同的链接
           
                 2.CSS sprites(合并图片)——将多幅图片合并为一幅单独的图片。
  
                 3.内联图片——使用data:URL模式将图片数据直接放在URL中

                4.合并脚本和样式表——采用外部脚本和样式表相比内联对性能更有利,但是过多的脚本和样式会增加额外的HTTP请求
 
规则2:使用内容发布网络
       内容发布网络:一组发布在多个不同地理位置的web服务器,用于更加有效地向用户发布内容。
       缺点:受网络(CDN)影响很大。主要用于发布静态内容,如图片、脚本、样式表和flash。

规则3:添加Expires头(缓存时间的控制)
         主要是针对浏览器对组件的缓存问题。    
         除了Expires头还可以设置Cache-Control max-age头。
       设置的对象,应该包含任何不经常变化的组件,包括脚本,样式表和flash组件。

规则4:压缩组件
      通过减小HTTP响应的大小来减少响应时间。
      web客户端可以通过请求中的 Accept-Encoding头来识别对压缩的支持。
 
      web服务器通过响应中的 Content-Encoding头来通知web客户端。

      目前主流的压缩方式是:gzip。   采用Conten-Encoding:gzip

      压缩的对象:主要是脚本和样式表
      注意:图片和PDF不应该压缩,因为他们本来就已经压缩了。

      压缩的成本:服务端会话费额外的CPU周期来完成压缩,客户端要对压缩文件进行解压缩。
              要检测收益是否大于开销。

规则5:将样式表放在顶部head中,并且使用link加载,而不要使用@import加载
       逐行呈现:为了避免当样式变化时重绘页面中的元素,浏览器会阻塞内容逐步呈现。
       放在底部容易出现的问题:白屏和无样式内容的闪烁。
       页面逐步呈现的,如果使用样式表,页面逐步呈现就会被阻止,知道所有的样式表下载完成。
       这就是将样式表放在head中的原因。

规则6:将脚本放在底部
        使用脚本时,对于所有位于脚本一下的内容,逐步呈现都被阻塞了。将脚本放在页面越靠下的地方,意味着越多的内容能够逐步地呈现。

规则7:避免CSS动态表达式
        css表达式是动态设置CSS属性的一种强大(并且危险)的方式。

规则8:使用外部JavaScript和CSS
       单纯来讲,内联更快一些。但是外置能很好的支出组件重用。避免了统一组件的反复加载。

规则9:减少DNS查找
        使用keep-Alive通过重用现有连接避免了重复的DNS查找。

规则10:精简javaScript
        精简(Minification)是从代码中移除不必要的字符以减小其大小,进而改善加载时间的实践。         
        不但内联脚本可以精简,内联脚本也能精简。
        精简工具:JSMin
        精简CSS带来的节省通过小于精简javascript

规则11:避免重定向     

规则12:移除重复脚本
               在一个页面中两次包含同一个javascript和css文件会损伤性能。

规则13:配置ETag(实体标签)

规则14:使ajax可缓存

减少网络请求,减少HTTP响应的大小,html页面加载顺序,组件的缓存这些方面来提高页面响应的时间。