前端优化 10s 到 100ms 是如何做到的?
发表时间:2021-1-5
发布人:葵宇科技
浏览次数:40
页面性能和体验优化并不是一蹴而就的,需要不断的研究、跟踪,发现问题,解决问题。但是我们可以在一开始编写业务代码的时候就做的更好,做到极致。
加载渲染链路优化之道
我们把这两个图对比一下,就可以很容易的排查出页面的加载链路问题。
静态资源链路
加载
解析渲染
为了让浏览器更快的解析渲染,我们需要考虑这几点:
CSS 嵌套层级不要太深,不超过3级,避免在最内层使用通配选择器。
JS 脚本不要太复杂,考虑轻量化架构,降低 JS 复杂性,减少解析时间,尽量不要引用复杂的第三方脚本。
按需加载模块,按需打包,首页仅仅加载和执行和首屏相关的脚本。其他脚本延迟加载执行。
考虑依赖的第三方模块是不是必须,需不需要精简。
打包优化,code split 和 tree shaken。常用webpack和rollup的优化。
用户交互相关事件绑定(比如页面scroll,用户左右滑动等),添加参数{passive:true},减少浏览器事件等待。因为这些事件属于可阻止事件,浏览器不知道用户会不会阻止,所以需要等待js执行,然后再做响应。添加passive参数,就告诉浏览器不用等待了。
iOS8 以后的 iOS 支持wkwebview,但是很多 App 之前用的还是 uiwebview,建议转换成wkwebview,获得性能的提升(UIwebview在执行 JS 时会阻塞 UI渲染进程,WKwebview不会)。
数据埋点
上面我们梳理了加载到解析渲染过程应该做的事情,那么如果你这些都做好了,发现网页表现依然不尽人意,那么你就要考虑做一下数据埋点。其实数据埋点在企业项目中也是必不可少的,和性能体验优化构成闭环。通过数据来发现页面性能和体验的问题,更有针对的进行解决。
事实上数据埋点分为三类:
业务埋点,统计诸如 PV、UV、点击率、流失率、转化率等
大数据埋点,统计与用户行为相关信息,比如那个用户点击了那个商品,上报用户 ID 和商品 ID,方便后台分析用户和商品的关系,可以用做大数据分析,推荐算法来为用户推荐商品。
工程埋点,统计工程上的数据信息,比如页面秒开率,DNS 时间等。