前端性能优化

前端性能优化七大手段

  • 减少请求数量

  • 减小资源大小

  • 优化网络连接

  • 优化资源加载

  • 减少重绘回流

  • 使用性能更好的API

  • webpack优化

    减小请求资源大小或数量

  • 尽量和并压缩css和js文件,例如将css文件和并为一个,将js合并为一个。
    原因:主要是为了减少http请求次数以及减少请求资源的大小。
    打包工具:webpack、gulp、grunt……

  • 尽量使用字体图标或者SVG图标来代替传统png图,因为字体图标或者SVG图标是矢量图,是代码编写出来的,放大缩小不会变形,而且渲染速度快。

  • 采用图片的懒加载(延迟加载)。
    目的:为了减少页面第一次加载过程中http的请求次数。
    具体步骤:
    1、页面开始加载时不去发送http请求,而是放置一张占位图;
    2、当页面加载完时,并且图片在可视区域再去请求加载图片信息.

  • 能用css做的效果,不要用js做,能用原生js做的,不要轻易去使用第三方插件,避免引入第三方大量的库,而自己却只是用里面的一个小功能。

  • 使用雪碧图(精灵图),把所有相对较小的资源图片,绘制在一张大图上,只需要将大图下载下来,然后利用,使用图片定位来将小图展现在页面中(background-position: 百分比, 数值)。

  • 减少对cookie的使用,最主要的就是要减少本地cookie存储内容的大小,因为客户端操作cookie的时候,这些信息总是在客户端和服务端传递,如果设置不当,每次发送一个请求都会携带cookie。

  • 前端与后端进行数据交互时,对于多项数据尽可能基于json格式来进行传送,相对于使用xml来说传输更有优势,因为json格式数据处理方便,资源偏小。

  • 前端与后端协商,合理使用keep-alive。

  • 前端与服务器协商,使用响应资源的压缩。

  • 避免使用iframe,因为使用iframe不仅不好管控样式,而且相当于在本页面又嵌套其他页面,还要加载这些嵌套页面的资源,使得性能消耗变大。

  • 在基于ajax的get请求进行数据交互的时候,根据需求可以让其产生缓存(注意:这个缓存不是我们常看到的304状态码,去浏览器本地取数据),这样在下一次从相同地址获取是数据时,取得就是上一次缓存的数据(注意:很少使用,一般都会清空,根据需求来做)。

代码优化

  • 在js中尽量减少闭包的使用,因为使用闭包后,闭包所在的上下文不会被释放。
  • 减少对DOM操作,主要是减少DOM的重绘与回流(重排)。
    关于重排(回流)的分离读写:如果需要设置多个样式,把设置样式全放在一起设置,不要一条一条的设置,使用文档碎片或者字符串拼接做数据绑定(DOM的动态创建)。
  • 在js中避免嵌套循环和“死循环”,因为一旦遇到死循环,浏览器就会直接卡掉。
  • 减少css表达式的使用。
  • 减少元素标签作为最后一个选择对象,因为css选择器解析规则是从右往左解析的。
  • 尽量将一个动画元素单独设置为一个图层(避免重绘或者回流的大小),注意:图层不要过多设置,否则不但效果没有达到反而更差了。
  • 在js封装过程中,尽量做到低耦合高内聚,减少页面的冗余代码。
  • css中设置定位后,最好使用z-index改变盒子的层级,让盒子不在相同的平面上。
  • css导入的时候尽量减少@import导入式,因为@import是同步操作,只有把对应的样式导入后,才会继续向下执行其他的代码,而link是异步的操作。
  • 使用window.requestAnimationFrame(js的帧动画)代替传统的定时器动画,如果想使用每隔一段时间执行动画,应该避免使用setInterval,尽量使用setTimeout代替setInterval定时器,因为setInterval定时器存在弊端:可能造成两个动画间隔时间缩短。
  • 尽量减少使用递归,避免死递归,如果一定要使用递归建议使用尾递归。
  • 基于script标签引用js文件时,可以使用defer或者async来异步加载。
  • 在事件绑定中,尽可能使用事件委托,减少循环给DOM元素绑定事件处理函数。
  • 减少Flash的使用。

存储优化

  • 结合后端,利用浏览器的缓存技术,做一些缓存(让后端返回304,告诉浏览器去本地拉取数据,可以让一些不太会改变的静态资源做缓存,比如一些图片,js文件,css文件
  • 利用h5的新特性(localStorage、sessionStorage)做一些简单数据的存储,避免向后台请求数据或者说在离线状态下做一些数据展示。

其他优化

  • 采用异步编程和延迟分批加载获取页面中的数据,使用异步加载是数据主要是为了避免浏览器失去响应,如果你使用同步,加载数据很大并且很慢,那么页面会在一段时间内处于阻塞状态。
    目的:为了解决请求数据不耽搁渲染,提高页面的渲染效率。
    解决方法:动态绑定数据区域,先隐藏,等数据返回并且绑定后再让其显示,延迟分批加载类似图片懒加载,以减少第一次页面加载时候的http请求次数。
  • 如果页面有出现音视频标签,可以不让页面加载的时候去加载这些资源(将音视频的preload设置为none即可),否则第一次加载会很慢,在页面加载完成后,并且音视频要播放的时候再去加载音视频资源。

如果你有任何的问题,欢迎评论区留言,你的支持是我前进的最大动力。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2020-2021 Sanmu
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信