前端性能优化-webpack构建优化

前言

本文主要总结 webpack 构建优化相关的事情

PS: webpack 的每次更新都会带来很多的新特性,因此学习新知识的时候,不要专注于流程的配置和调参。因为流程终会简化,参数(API)终会升级。要抓大放小,把精力放在最核心的内容上,因为核心的思想是最不容易过时的.

webpack 性能瓶颈

webpack 优化主要分为两个方向:

构建速度优化

  • 使用最新版本的 webpack,一般融合了最佳实践
  • 文件过滤:使用 include 和 exclude, ignorePlugin 等
  • 优化 resolve.modules 配置: 合理配置 resolve.modules,指定 Webpack 去哪些目录下寻找模块。避免过多的目录会加速模块的查找速度。
  • 优化 loader(减少 loader 链的复杂性, 如 thread-loader 或 cache-loader)
  • 利用多核 CPU 多进程构建( HappyPack 或者 Webpack 5 提供的 cache 和 parallel 选项)
  • 缓存(DLL 等空间换时间的方案)
  • 使用更轻量的 SourceMap(cheap-module-source-map)
  • 代码分割: 将代码拆分成小块,只加载在当前页面上需要的部分。
  • 合理配置打包版本
代码分割(拆包 splitChunks)

在不配置拆包的情况下,Webpack 会将所有的资源都打包在一个 js 文件中,这无疑会让请求时候的响应体积变得非常大,从而降低加载速度。

同时,不配置拆包,会在首次加载的时候加载一些无关的资源,浪费了一次宝贵的请求。合理配置拆包,让每次请求都只请求对应的核心资源,从而达到按需加载的程度。

拆包通常的逻辑:

  • 业务代码和第三方依赖进行拆分
  • 对于第三方依赖:
    • 将版本经常变动的与版本不怎么变动的进行拆分
    • 版本不怎么变动的依赖可以合理配置 CDN
  • 对于业务代码:
    • 将业务模块和公共模块进行拆分
    • 业务模块也根据调用的次数进行拆分
    • 将首屏模块单独进行拆分
合理配置打包版本

代码体积优化

  • Three shaking 移除项目中未使用的代码
  • 压缩代码: 如 terser-webpack-plugin, css-minimizer-webpack-plugin
  • 分割代码(Code Splitting)
  • 动态导入(Dynamic Import)
    • import('some-module').then(({ someModule }) => {// 使用 someModule});
  • 提取公共模块: 通过 Webpack 的 CommonsChunkPlugin 或 optimization.splitChunks 来提取公共模块,减小重复模块的体积
  • 图像、字体等资源优化

掌握优化策略,然后用到的时候直接通过官方文档查找最新的 API 即可或者搜索关键字即可

参考

本文首发于个人博客前端开发笔记,由于笔者能力有限,文章难免有疏漏之处,欢迎指正

相关推荐
m0_748229991 天前
Vue2 vs Vue3:核心差异全解析
前端·javascript·vue.js
C澒1 天前
前端监控系统的最佳实践
前端·安全·运维开发
xiaoxue..1 天前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
hhy_smile1 天前
Class in Python
java·前端·python
小邓吖1 天前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
南风知我意9571 天前
【前端面试2】基础面试(杂项)
前端·面试·职场和发展
LJianK11 天前
BUG: Uncaught Error: [DecimalError] Invalid argument: .0
前端
No Silver Bullet1 天前
Nginx 内存不足对Web 应用的影响分析
运维·前端·nginx
一起养小猫1 天前
Flutter for OpenHarmony 实战 表单处理与验证完整指南
android·开发语言·前端·javascript·flutter·harmonyos
weixin_395448911 天前
main.c_cursor_0130
前端·网络·算法