• 前端优化总结


    • js优化:

      • 减少重绘和回流
        a) 避免不必要的Dom操作
        b) 尽量改变Class而不是Style,使用classList代替className
        c) 避免使用document.write
        d) 减少drawImage
        《页面重绘和回流以及优化》
      • 缓存Dom选择与计算
        每次Dom选择都要计算,缓存他
      • 缓存列表.length
        每次.length都要计算,用一个变量保存这个值
      • 尽量使用事件代理,避免批量绑定事件
      • 尽量使用ID选择器
      • TOUCH事件优化
        使用touchstart、touchend代替click,因快影响速度快。但应注意Touch响应过快,易引发误操作
      • 减少阻塞
      • 把所有变量声明统一放到函数的起始位置 (在后部声明的变量也会被JS视为在头部定义,由此会产生问题)
      • 不要扩充内置原型(虽然给Object(), Function()之类的内置原型增加属性和方法很巧妙,但是会破坏可维护性)
      • 优化书写方法
        • 《编写可维护的代码》
        • 单变量模式
        • Hoisting:把所有变量声明统一放到函数的起始位置 (在后部声明的变量也会被JS视为在头部定义,由此会产生问题)
        • 不要扩充内置原型(虽然给Object(), Function()之类的内置原型增加属性和方法很巧妙,但是会破坏可维护性)
        • 不要用隐含的类型转换
        • 不要用 eval()
        • 用 parseInt() 进行数字转换
        • (规范)左大括号的位置
        • 构造器首字母大写
        • 写注释
        • 不要用 void
        • 不要用 with 语句
        • 不要用 continue 语句
        • 尽量不要用位运算
      • 《js 压缩》
      • 《JavaScript 秘密花园-数组》
    • jQuery优化

    • CSS优化

      • 《Autoprefixer》

      • 避免使用CSS表达式
      • 避免在HTML标签中写style,这样会影响CSS的渲染。
      • 移除空的CSS规则,空的CSS规则增加了CSS文件的大小,且影响CSS树的执行
      • 正确使用Display的属性
        Display属性会影响页面的渲染,因此请合理使用
        a) display:inline后不应该再使用width、height、margin、padding以及float
        b) display:inline-block后不应该再使用float
        c) display:block后不应该再使用vertical-align
        d) display:table-*后不应该再使用margin或者float、
      • Float在渲染时计算量比较大,尽量减少使用
      • Web字体需要下载,解析,重绘当前页面,尽量减少使用
      • 过多的Font-size引发CSS树的效率
      • 为了浏览器的兼容性和性能,值为0时不要带单位
      • 标准化各种浏览器前缀
        a) 无前缀应放在最后
        b) CSS动画只用 (-webkit- 无前缀)两种即可
        c) 其它前缀为 -webkit- -moz- -ms- 无前缀 四种,(-o-Opera浏览器改用blink内核,所以淘汰)
      • 高级选择器执行耗时长且不易读懂,避免使用。
      • 外链 CSS 中避免 @import 引入。
      • 《为什么每个前端开发者都要理解页面的渲染》
      • 《优化浏览器渲染》
    • SEO优化

    • WEB性能优化

      • 1.图片优化:

        • 优先使用CSS效果、CSS动画来替代图片,避免在低端机上使用大量CSS3渐变阴影效果,可考虑降级效果来提升流畅度。
        • 移动端可以使用网络字体来替代图片。
        • 使用base64来优化背景图片(最好的小的背景图片或者图标,<img>标签最好不要使用) 
        • 合并小图片使用雪碧图。
        • 避免图片和iFrame等的空Src
          • 空Src会重新加载当前页面,影响速度和效率.在使用图片异步加载时,可以选将src设置为一个一像素的小图。base64形式的。
        • 尽量避免重设图片大小
          • 重设图片大小是指在页面、CSS、JavaScript等中多次重置图片大小,多次重设图片大小会引发图片的多次重绘,影响性能。
        • 颜色丰富的照片,JPG是通用的选择:
          • 人眼的结构很适合查看JPG压缩后的照片,可以充分的忽略并在脑中补齐细节
          • JPG在压缩率不高时保留的细节还是不错的
          • WebP能够比JPG减少30%的体积,但目前兼容性较差(Chrome,Opera,Android Chrome,Android Browser).
        • 如果需要较通用的动画,GIF是唯一可用的选择:(APNG只有在Firefox,Safari,iOS Safari上有效,且是无损压缩)
          • GIF支持的颜色范围为256色,而且仅支持完全透明/完全不透明
          • GIF在显示颜色丰富的动画时可能出现颜色不全、边缘锯齿等问题
        • 如果图片由标准的几何图形组成,或需要使用程序动态控制其显示特效,可以考虑SVG格式(IE8+)
          • SVG是使用XML定义的矢量图形,生成的图片在各种分辨率下均可自由放缩
          • SVG中可以通过JavaScript等接口自由变换图片特效,可以完成其中部分元素的自由旋转、移动、变换颜色等
        • 如果需要清晰的显示颜色丰富的图片,PNG比较好
          • PNG-8能够显示256种颜色,但能够同时支持256阶透明,因此颜色数较少但需要半透明的情景(如微信动画大表情)可以考虑PNG-8
          • PNG-24可以显示真彩色,但不支持透明,颜色丰富的图片推荐使用(如屏幕截图、界面设计图)
          • PNG-32可以显示真彩色,同时支持256阶透明,效果最好但尺寸也最大
        • 《响应式图片》
          •  Srcset和sizes
        • 图片优化工具
        • 实践
      • 2.工程化前端部署:

      • 3.性能测试工具

      • 4.浏览器缓存

      • 5.压缩HTML,CSS,JS

        • 减少资源大小可以加快网页显示速度,所以要对HTML、CSS、JavaScript等进行代码压缩,并在服务器端设置GZip
      • 6.加载优化

        • 按需加载(注意页面重绘影响性能)
        • 滚屏加载
        • 预加载(提前加载下一页)
        • 减少请求(重要)初始请求不多于4个。
      • 7.渲染优化

        •  HTML使用Viewport
          Viewport可以加速页面的渲染,请使用以下代码
          <meta name=”viewport” content=”width=device-width, initial-scale=1″>
        • 减少Dom节点
          Dom节点太多影响页面的渲染,应尽量减少Dom节点
        • 动画优化
          a) 尽量使用CSS3动画
          b) 合理使用requestAnimationFrame动画代替setTimeout
          c) 适当使用Canvas动画 5个元素以内使用css动画,5个以上使用Canvas动画(iOS8可使用webGL)
        •  高频事件优化
          Touchmove、Scroll 事件可导致多次渲染
          a) 使用requestAnimationFrame监听帧变化,使得在正确的时间进行渲染
          b) 增加响应变化的时间间隔,减少重绘次数
        •  GPU加速
          CSS中以下属性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)来触发GPU渲染,请合理使用
          PS:过渡使用会引发手机过耗电增加      
      • 8.其它

        • 减少cookie:Cookie会影响加载速度,所以静态资源域名不使用Cookie
        • 避免重定向:重定向会影响加载速度,所以在服务器正确设置避免重定向
        • 异步加载第三方资源:第三方资源不可控会影响页面的加载和显示,因此要异步加载第三方资源
        • 服务端开启keep-alive  《HTTP协议头部与Keep-Alive模式详解》

    参考资料:

    《Web性能优化:图片优化》

    《移动H5前端性能优化指南》
  • 相关阅读:
    JavaTPoint 移动开发教程【翻译完成】
    JavaTPoint 数据库教程【翻译完成】
    JavaTPoint PHP 中文教程【翻译完成】
    JavaTPoint .NET 中文教程【翻译完成】
    JavaTPoint 大数据和云计算中文教程【翻译完成】
    python基础学习笔记二:字符串相关知识
    python基础学习笔记(一):基本介绍
    python 基础学习三:数据结构对比
    python 基础学习五:关键字
    python基础学习笔记四:PEP8 Python 编码规范
  • 原文地址:https://www.cnblogs.com/towersxu/p/4364996.html
Copyright © 2020-2023  润新知