前言
笔者近半年一直在参与项目重构,在重构过程中大量应用「性能优化」和「设计模式」两方面的知识。「性能优化」和「设计模式」两方面的知识不管在工作还是面试时都是高频应用场景,趁着这次参与大规模项目重构的机会,笔者认真梳理出一些常规且必用的性能优化建议
,同时结合日常开发经验整理出笔者在网易四年来实践到的认为有用的所有性能优化建议
,与大家一起分享分享!(由于篇幅有限,那设计模式
在后面再专门出一篇文章呗)
可能有些性能优化建议
已被大家熟知,不过也不影响这次分享,当然笔者也将一些平时可能不会注意的细节罗列出来。
平时大家认为性能优化
是一种无序的应用场景,但在笔者看来它是一种有序的应用场景且很多性能优化
都是互相铺垫甚至一带一路。从过程趋势来看,性能优化
可分为「网络层面」和「渲染层面」;从结果趋势来看,性能优化
可分为「时间层面」和「体积层面」。简单来说就是要在访问网站时使其快准狠地立马呈现在用户眼前
。
性能优化.png
所有的性能优化
都围绕着两大层面两小层面
实现,核心层面是网络层面
和渲染层面
,辅助层面是时间层面
和体积层面
,而辅助层面则充满在核心层面里。于是笔者通过本文整理出关于前端性能优化
的「九大策略」和「六大指标」。当然这些策略
和指标
都是笔者自己定义,方便通过某种方式为性能优化做一些规范。
因此在工作或面试时结合这些特征就能完美地诠释性能优化
所延伸出来的知识了。「前方高能,不看也得收藏,走起!!!」
所有代码示例为了凸显主题,只展示核心配置代码,其他配置并未补上,请自行脑补
九大策略
网络层面
「网络层面」的性能优化,无疑是如何让资源体积更小加载更快
,因此笔者从以下四方面做出建议。
- 「构建策略」:基于构建工具(
Webpack/Rollup/Parcel/Esbuild/Vite/Gulp
) - 「图像策略」:基于图像类型(
JPG/PNG/SVG/WebP/Base64
) - 「分发策略」:基于内容分发网络(
CDN
) - 「缓存策略」:基于浏览器缓存(
强缓存/协商缓存
)
上述四方面都是一步接着一步完成,充满在整个项目流程里。「构建策略」和「图像策略」处于开发阶段,「分发策略」和「缓存策略」处于生产阶段,因此在每个阶段都可检查是否按顺序接入上述策略。通过这种方式就能最大限度增加性能优化
应用场景。
构建策略
该策略主要围绕webpack
做相关处理,同时也是接入最普遍的性能优化策略
。其他构建工具的处理也是大同小异,可能只是配置上不一致。说到webpack
的性能优化
,无疑是从时间层面
和体积层面
入手。
笔者发现目前webpack v5整体兼容性还不是特别好,某些功能配合第三方工具可能出现问题,故暂未升级到v5,继续使用v4作为生产工具,故以下配置均基于v4,但总体与v5的配置出入不大
笔者对两层面分别做出6个性能优化建议
总共12个性能优化建议
,为了方便记忆均使用四字词语概括,方便大家消化。⏱表示减少打包时间
,