前端性能优化的目的:让页面更快响应用户的请求,展现内容
-
页面加载过程中,关于 css,js,媒体资源(生产到传输):
- 代码拆分(只加载当前页面需要的内容)
- 减少请求(减少 Http 连接建立的耗时)
- 使用 CDN 减少网络延迟
- 网络协议选择 Http2.0,TLS 1.3 减少握手时间,
- 利用缓存:减少请求,更快响应
- 媒体资源压缩:包括音视频和图片,需要进行一定程度的压缩,减少流量消耗,也能更快响应用户
- 预加载内容:
link rel="prefetch/preload"
,提前加载,快速响应
-
页面运行过程中:
- 媒体资源延迟加载:只在其在需要在页面展示时才显示,减少内存占用
- 页面渲染减少 DOM 节点:比如对于长列表使用虚拟列表,减少内存占用
- debounce 和 throttle 减少前端计算,减轻服务器压力
- memorized:空间换时间,代价是更多内存消耗,可以减少前端计算,
- 避免对元素的尺寸和位置频繁修改,减少浏览器重排重绘
- 合理使用合成层,利用计算机的硬件加速(GPU) 实现更快和更流畅的动画效果
- 使用 web worker 处理计算耗时的任务,避免阻塞主线层
- 使用 WebAssembly, 获得更快的运算速度
- 请求数据缓存:对于相对稳定的数据或者有一定有效时间的数据,可以在从服务器请求后缓存到本地,短时间内再次获取时直接用缓存,减少请求
- 异常监控处理:捕获并处理 JavaScript 的错误和异常,避免页面崩溃或出现异常情况。
总结:
-
减少内存
- 媒体资源延迟加载:只在其在需要在页面展示时才显示,减少内存占用
- 页面渲染减少 DOM 节点:比如对于长列表使用虚拟列表,减少内存占用
-
减少计算或者加速计算:
- debounce 和 throttle 减少前端计算,减轻服务器压力
- memorized:空间换时间,代价是更多内存消耗,可以减少前端计算,
- 使用 web worker 处理计算耗时的任务,避免阻塞主线层
- 使用 WebAssembly, 获得更快的运算速度
-
浏览器减少计算或者加速计算
- 避免对元素的尺寸和位置频繁修改,减少浏览器重排重绘
- 合理使用合成层,利用计算机的硬件加速(GPU) 实现更快和更流畅的动画效果
-
其它:
- 请求数据缓存:对于相对稳定的数据或者有一定有效时间的数据,可以在从服务器请求后缓存到本地,短时间内再次获取时直接用缓存,减少请求
- 异常监控处理:捕获并处理 JavaScript 的错误和异常,避免页面崩溃或出现异常情况。