zoukankan      html  css  js  c++  java
  • 前端性能优化浏览器+服务器篇

    一、性能优化之浏览器篇

    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后,每年节省的费用百万级
  • 相关阅读:
    redis网络资料汇总
    Spring攻略学习笔记(3.01)在Spring中启用AspectJ注解支持
    [C/C++]福尔摩斯 ABCDE*?=EDCBA
    MyBatis测试范例
    使用TileMap制作游戏地图,在cocos2dx中使用(一)
    Tomcat7 catalina.out 日志分割
    MyBatis之User.xml
    基于 SIP webRTC 架构的系统部署模型分析
    第42周星期二
    第41周星期三小结
  • 原文地址:https://www.cnblogs.com/qijunjun/p/7309263.html
Copyright © 2011-2022 走看看