«

前端性能优化有哪些方案

codeez 发布于 阅读:185 随笔


前端性能优化涉及到的是多方面的,通过各种策略来提高网页和应用的速度、体验。
分为三个层面:
项目架构
项目开发
项目部署

架构设计要考虑:协同开发、模块解藕,每个模块尽量做到高内聚、低耦合。
每个组件都有自己独立的功能和状态管理,从而减少模块之间的耦合
每个模块或组件只有一个明确的功能,可以减少复杂度,提高可读性和可维护性(单一职责)
使用明确的目录结构来组织代码文件,使得每个模块的职责更加清晰
比如Vue的源码就划分了渲染器、编译器、响应式系统

Webpack和Vite都支持代码分割,这有助于只加载需要的模块,减少初始加载时间并提高性能。
使用动态导入可以根据需要懒加载模块,降低加载时间
Tree Shaking可去除未使用的代码来优化输出大小

代码审查、CICD

项目开发方面:
数据层级不宜过深,合理设置响应式数据;
通过Object.freeze()方法冻结属性;
使用数据时缓存值的结果,不频繁取值;使用计算属性
合理设置key属性;避免不必要的DOM更新
v-show和v-if的选取;
控制组件粒度(Vue采用组件级更新)
采用函数式组件(函数式组件开销低)
采用异步组件(借助webpack分包的能力)组件懒加载
合理使用keep-alive、v-once
分页、虚拟滚动、时间分片...
根据虚拟DOM更新特性,将状态下沉到子组件,避免全局或父组件频繁更新
节流、防抖
繁重任务可放到Web Workers中
使用精灵图,webp、avif的图片格式
图片懒加载
采用更简单的CSS选择器,避免复杂的选择器链
尽量减少DOM操作避免回流和重绘,transform和opacity进行动画效果可避免回流
使用CSS动画而非JS动画,提升性能
代码压缩和混淆,Terser可压缩JS
第三方包按需引入
使用虚拟滚动技术处理长列表,只渲染可视区域的元素


使用路由懒加载、异步组件,实现组件拆分,减少入口文件体积大小(优化体验骨架屏)
抽离公共代码,采用splitChunks进行代码分割
组件加载采用按需加载
静态资源缓存,采用HTTP缓存(强制缓存、对比缓存),使用localStorage实现缓存资源
图片资源的压缩,雪碧图、对小图片进行base64减少http请求
打包时开启gzip压缩处理compression-webpack-plugin插件
静态资源采用CDN提速
使用SSR对首屏做服务端渲染
预加载

前端

请先 登录 再评论