作为一名研发,到了一定程度之后对性能的优化是不可避免的,现总结一下在日常研发中,思考以及有过实践的一些性能优化点。
# 减少请求数
- 减少
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内容发生变化的才构建,提升效率。