当前位置: 首页 > news >正文

前端性能优化-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 即可或者搜索关键字即可

参考

  • https://jelly.jd.com/article/61179aa26bea510187770aa3
  • https://juejin.cn/post/6844903952140468232

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

http://www.lryc.cn/news/416935.html

相关文章:

  • Traefik:部署与实战
  • [Spring] SpringBoot统一功能处理与图书管理系统
  • 实现吸顶效果,一个页面多个元素吸顶效果
  • 【C++入门(下)】—— 我与C++的不解之缘(二)
  • 【数据结构】哈希应用-STL-位图
  • Unbuntu 服务器- Anaconda安装激活 + GPU配置
  • python 装饰器记录函数用时
  • 实验10 任何一个非0自然数m的立方均可写成m个连续奇数之和。
  • Jenkins的安装方式
  • 网络之华为S5700S-52P-LI交换机系统恢复
  • 蜂窝网络架构
  • 培训第二十二天(mysql数据库主从搭建)
  • 速盾:CDN回源失败都有什么原因?
  • C语言 | Leetcode C语言题解之第328题奇偶链表
  • 8月6日笔记
  • 爱可声助听器:在全球听力市场中破冰前行
  • 华为OD面试 - 最佳升级时间窗(Java JS Python C C++)
  • LE-50821F/FA激光扫描传感器|360°避障雷达之性能参数与配置清单说明
  • 精准洞察农田生态,智慧农业物联网环境监测与数据采集系统来袭
  • sql注入复现(1-14关)
  • Spring Boot-12
  • 【Linux】进程详解
  • python的多线程
  • 在Kylin服务器安装PostgreSQL16数据库
  • 【第15章】Spring Cloud之Gateway网关过滤器(URL黑名单)
  • pytorch和deep learning技巧和bug解决方法短篇收集
  • 【socket编程】UDP网络通信 {简单的服务器echo程序;简单的远程控制程序;简单的网络聊天室程序}
  • 大数据存储解决方案:HDFS与NoSQL数据库详解
  • 如何用 ChatGPT 提升学术写作:15 个高效提示
  • 【算法】贪心算法