前端性能优化浏览器+服务器篇

一、性能优化之浏览器篇

1、把CSS放在head中加载

  • 能让页面更早的开始渲染,避免闪屏
  • 最好能包含关键渲染路径的样式:首屏
  • 会让页面显得加载速度更快,因为这样做可以使浏览器逐步加载已经下载的网页内容,这对内容比多的网页尤其重要,用户不用一直等待在一个白屏上,而是可以先看到已经下载的内容。
  • 如果样式表放在底部,浏览器会拒绝渲染已经下载的网页,因为大多数浏览器在实现时都努力避免重绘,样式表中的内容是绘制网页的关键信息,没有下载下来之前只好对不起观众了。

2、把JS放在body未尾

  • 因为JS阻塞HTML解析和CSS渲染

3、不使用CSS表达式

  • 看似强大,实际性能开销很大,可能导致页面卡顿

 4、用外链方式引用CSS和JS

  • 有效减少HTML的体积
  • 可合理利用浏览器缓存

5、压缩JS和CSS

  • 生产环境删除不必要的注释、空白
  • JS中变量名压缩,混淆压缩

6、不重复加载JS

  • 在IE中还是会多个请求,不能发挥缓存优势
  • 意味着更长的JS执行时间

7、让Ajax请求可缓存

  • GZIP、内容压缩都可适用

8、用GET方式发起Ajax请求

  • GET方式可以缓存
  • 如果是获取信息,GET更语义化
  • 如果是提交数据,POST更语义化

9、组件延迟加载

  • 保障关键页面资源优先加载:因为并发数限制
  • 延迟加载的典型手段:Lazyload(对于图片比较多的页面)

10、减少DOM节点数

  • 天猫:更多节点数以为浏览器布局、渲染时计算量更大
  • 会加大页面加载和脚本执行的效率

11、避免使用iframe

  • 会阻塞父文档的onload
  • 即使是空白也比较耗时

12、减少COOKIE体积

  • 因为COOKIE每次请求都会全部带上

13、使用无COOKIE域名加载静态资源

  • 减少静态资源加载时的网络传输量
  • 静态资源加载通常是不需要COOKIE的
  • 阿里:精简COOKIE后,每年节省的流量TB记

14、减少JS中的DOM访问 

  • 对于查找到的元素,缓存在变量中
  • 节点增加是合理利用DocumentFragment
  • 不要用JS去频繁修改样式

15、使用更智能的事件监听机制

  • 基于事件冒泡的委托机制,有效减少绑定的数量
  • $("selector").delegate("li","click",function(){});

16、使用常见的图片优化手段

  • 相比代码,图片体积很大
  • 常见的压缩工具:PNGCrush、JPEGTRAN、PNGQUANT
  • 渐进式编码:JPG 

17、不要在HTML中缩放图片

  • 徒增渲染开销,提供适当尺寸即可(用到多大的就用多大的,比如使用100*100的不要设置为500*500)

18、不要把图片src置空

  • IE、Chrome、FireFox会发起额外的主文档请求
  • 空的图片src仍然会使浏览器发送请求到服务器,这样完全是浪费时间,而且浪费服务器的资源。尤其是你的网站媒体被很多人访问的时候,这种空请求造成的伤害不容忽略。

19、任何资源尽量在25K以内

  • iphone无法缓存25K以上的资源

二、性能优化之服务器篇

1、减少网络请求

  • 合并请求:包括JS、CSS(将多个CSS合并在一起)
  • 使用雪碧图:CSS Sprite
  • 使用地图:HTML Map
  • 内联小图片:Base64Encode

2、使用内容分发网络CDN

  • 地理上离用户更近
  • 专业的公司提供服务

3、适当的使用缓存

  • 为静态资源添加Expires响应头
  • 为静态资源添加Cache-Control资源
  • 配置Apache、Nginx、Express

4、启用GZIP压缩

  • 大幅度减少网络传输体积,压缩率高达:60%~90%
  • 多种文件类型:HTML、JS、CSS、Image

5、减少DNS查找

  • 单个站点不要使用太多域名
  • 单次DNS查找约消耗20~120ms

6、避免重定向3XX(301、302)

  • 重定向对浏览器意味着重头再来
  • 每次重定向至少多花费50ms

7、配置有效的ETAG

  • 跟浏览器说明过期规则

  

8、让Ajax请求可缓存

  • GZIP、内容压缩都可适用

 9、尽快输出第一个字节

  • 尽快输出页面头部,浏览器能尽快干活
  • 并行下载外链的CSS
  • 风靡一时的BigPipe也是基于此

10、使用无COOKIE域名加载静态资源

  • 减少静态资源加载时的网络传输量
  • 静态资源加载通常是不需要COOKIE的
  • 阿里:精简COOKIE后,每年节省的费用百万级
posted @ 2017-08-08 22:11  小Q的博客  阅读(430)  评论(0编辑  收藏  举报