前端性能优化

114 阅读4分钟

一、加载时的优化

1、减少http请求

一个完整的http请求需要经历DNS查找,TCP握手,浏览器发出http请求,服务器接收请求,服务器处理请求并发回响应,浏览器接收响应等一系列复杂的过程。当请求较多时,直接体现在了消耗性能上面,我们可以将多个小文件合并为一个大文件,减少http请求。

2、使用服务器端渲染

客户端渲染时,获取html文件,根据需要加载js文件,运行文件,生成DOM再渲染,这个过程中需要浏览器花费性能处理。而服务端渲染返回html文件,客户端只需要解析html即可。

3、静态资源使用CDN

CDN就是内容分发网络,它是一组分布在多个不同地理位置的web服务器。

当服务器离用户越远时,延迟越高,CDN就是来解决这个问题的,让用户离服务器更近,从而缩短请求时间。

4、css写在头部,js写在底部

所有放在head标签中的css和js都会堵塞渲染,如果这些css和js需要加载和解析很久的话,那么页面就空白了。所以js文件需要放在底部,等html解析完了再加载js。

那为什么css要放在头部呢?因为先加载html再加载css,会让用户第一时间看到的页面是没有样式的、“丑陋”的,为了避免这种情况发生,就要将css文件放在头部。

另外,js也可以放在头部,只要给script标签加上defer属性就可以了,defer是异步下载但js在html解析完再执行。

5、字体图标代替图片图标

字体图标就是将图标制作为一个字体,使用时就跟字体一样,可以设置属性,例如:font-size: 14px; color: red;等等。字体图标是矢量图,不会失真。还有一个优点是生成的文件特别小。

6、利用缓存不重复加载相同的资源

为避免用户每次访问网站都得请求文件,我们可以通过添加expires来控制这一行为。expires设置了一个时间,在这个时间之前,浏览器都不会请求文件,而是直接使用缓存。

7、图片优化

  1. 图片延迟加载:在页面中,先不给图片设置路径,只有当图片出现在浏览器可视区域时,才去加载真正的图片
  2. 降低图片质量:图片100%和90%质量通常看不出来区别,尤其是用来当背景图的时候。我们可以在用ps切背景图时,将图片切成jpg格式,并且将它压缩到60%的质量,这样基本看不出来区别
  3. 尽可能用css3效果代替图片:一些渐变和小箭头用css就可以画出来,没必要使用图片
  4. 使用雪碧图

8、通过webpack按需加载代码

懒加载或按需加载,是一种很好的优化网页的方式。这种方式实际上是先把你的代码在一些逻辑断点处分离开,然后在一些代码块完成某些操作后,立即引用或即将引用另外一些新的代码块。这样加快了应用的初始加载速度,减轻了它的总体体积,因为某些代码块可能永远不会被加载

二、运行时的优化

1、减少重排重绘

用js修改样式时,最好不要直接写样式,而是替换class来改变样式。

在对DOM元素进行操作时,可以将DOM先脱离文档流,修改完后再带回文档,可以使用display: none或文档碎片

2、使用事件委托

事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件

3、if-else对比switch

当判断条件数量越来越多时,越倾向于使用switch而不是if-else。不过,switch只能用于case值为常量的分支结构,而if-else更加灵活

4、不要覆盖原生方法

无论js代码如何优化,都比不上原生方法。因为原生方法是低级语言写的,并且被编译成机器码,称为浏览器的一部分。当原生方法可用时,尽量使用它们,特别是数学运算和DOM操作

5、使用flex布局

在早期的css布局方式中只能对元素实行绝对定位、相对定位或浮动。现在有了flex布局,它比早期的布局方式更有优势,性能比较好

6、用transform和opacity属性更改来实现动画

在css中,transform和opacity这两个属性更改不会触发重排与重绘,它们是可以由合成器单独处理的属性