作为一名研发,到了一定程度之后对性能的优化是不可避免的,现总结一下在日常研发中,思考以及有过实践的一些性能优化点。
# 减少请求数
- 减少
DNS
查询时间。 - 利用浏览器本地存储或者
redux、dva
将请求数据缓存在本次会话中,避免多次请求。 - 利用
url-loader
对小图片进行base64
转码通过增加体积换请求 或者 利用webpack5 - assets modules
。 - 配合
webpack chunkhash
合理使用浏览器缓存。
# 较小请求资源体积
webpack
自带new TerserPlugin
插件开启多线程js
压缩。- 生产环境看情况要不要进行
mini-css-extract-plugin
抽离css
样式,利用optimize-css-assets-webpack-plugin
压缩css
。 externals
拆分不常变更的三方库,利用cdn
加载。- 开启
tree sharking
减少无用代码的引入。 IgnorePlugin
忽略不需要的文件。- 利用
iconfont
替换图标、图片。
# 提升网络传输速率
- 合理使用
图片大小
以及进行图片压缩
。 gzip
压缩。nginx
代理以及负载均衡。http2
头部压缩(减少每次请求附带开销)、多路复用(保持一个链接可以用,减少握手次数带来性能损耗)、服务端推送(主动提前推送浏览器需要请求的资源)、请求优先级(重要的数据先请求或者先推送)。
# 构建
babel
开启缓存,babel-loader?cacheDirectory
。loader
指定include
或者exclude
指定目录,缩小构建范围。loader
的耗时如果比较多的话,可以使用thread-loader
开启多线程池,充分利用机器资源。HardSourceWebpackPlugin
为模块提供中间缓存,首次构建时间没有太大变化,但是第二次开始,构建时间极大减少。pm2
可以开启node cluster
集群模式。js
设置chunkhash,css
利用new extractTextPlugin('../css/bundle.[name].[contenthash].css')
设置contenthash
(暂未尝试),目的:js
模块改变之后,因为引用了css
,如果依然使用chunkhash
会导致css
重复构建,所以利用插件设置只有css
内容发生变化的才构建,提升效率。