webpack打包优化策略

1. 减少打包体积

减少打包文件的大小是为了提高加载速度,降低网络带宽消耗,提升用户体验。常见的减少打包体积的优化策略包括:

  • 代码分割(Code Splitting):将代码拆分成多个小文件,让浏览器按需加载。常见方法包括:入口分割、动态导入、异步加载。

  • 项目分包:在路由里面使用懒加载,将页面打包成多个包

  • 树摇(Tree Shaking):去除没有使用的代码,减少无用代码的引入和打包,特别适用于 ES6 模块。

  • 压缩(Minification):通过压缩 JavaScript、CSS 等资源,去除空格、注释、换行等无用字符,减少文件大小。

    • 使用 TerserPlugin 压缩 JS。

    • 使用 CssMinimizerPlugin 压缩 CSS。

    • 压缩图片,将比较小的图片转为base64

  • 提取公共代码(Code Deduplication):将多个文件中重复的代码提取到一个单独的文件中,避免重复打包相同的代码。

  • 使用CDN:将比较大的依赖包放到CDN上,通过js引入项目

  • 删除无用资源(Dead Code Elimination):使用 PurgeCSS 等工具删除未使用的 CSS 规则。

  • 按需加载第三方库:例如,使用 babel-plugin-import 只加载库的部分功能,而不是整个库。

2. 加快打包速度

加快打包速度是为了提升开发效率,缩短构建和重构的时间。常见的加速构建的优化策略包括:

  • 缓存(Caching):通过使用缓存,避免每次都重新构建相同的内容,减少重复的构建时间。Webpack 提供了内建的构建缓存功能,通过配置 cache 来保存中间结果。

  • 并行构建(Parallelism):通过并行化处理多个构建任务来加速构建。例如,parallel-webpack 插件可以启用多个构建进程并行执行。

  • 增加构建并发性:使用 thread-loaderhappy-pack 等工具来将构建任务分配到多个线程,提升构建效率。

  • 使用 HardSourceWebpackPlugin:通过存储模块构建的中间结果,下次构建时直接复用,从而加快速度。

  • 优化 devtool 配置:在开发模式下,选择合适的 source map 类型。通常 eval-source-map 比较快速,但 source-map 会提供更详细的调试信息,适合生产环境。

  • 构建监视(Watch Mode):在开发过程中开启 watch 模式,避免每次修改都进行完全重新构建。Webpack 会监听文件变化,仅构建发生变化的部分。

  • 热模块替换(HMR):通过模块热替换(HMR),仅更新修改的部分,而不是重新加载整个页面,提升开发效率。

总结

  • 减少打包体积:主要关注如何减小生成的文件大小,减少网络传输时间,提升应用加载性能。

  • 加快打包速度:主要关注如何优化构建过程,提高开发时的构建效率,缩短构建和重构的时间。

这两类优化常常是相辅相成的,在实践中很多优化策略会同时涉及到这两方面的提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ与kafka如何解决消息积压问题?

前言 消息积压问题简单来说,就是MQ存在了大量没法快速消费完的数据,造成消息积压的原因主要在于“进入的多,消费的少”,或者生产的速度过快,而消费速度赶不上,基于这一问题,我们主要介绍如何通过…

RISC-V平台编译 state-thread x264 ffmpeg zlog

1.state-threads 源码下来之后 直接 make linux-debug 目录下生成了对应的.a 和 .h文件 gcc test.c -o test -l st -L . #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h&g…

用easyExcel如何实现?

要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能&#xff0c;需要结合 EasyExcel 库来读取 Excel 数据。具体来说&#xff0c;可以使用 EasyExcel.read() 方法来读取 Excel 文件&#xff0c;并指定 ExcelModelListener 作为事件监听器。 下面是…

BUU37 [DASCTF X GFCTF 2024|四月开启第一局]web1234【代码审计/序列化/RCE】

Hint1&#xff1a;本题的 flag 不在环境变量中 Hint2&#xff1a;session_start&#xff08;&#xff09;&#xff0c;注意链子挖掘 题目&#xff1a; 扫描出来www.zip class.php <?phpclass Admin{public $Config;public function __construct($Config){//安全获取基…

Mysql中使用sql语句生成雪花算法Id

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

Go框架面试突击!30道高频题解析

前言 有粉丝朋友问我能不能整理Go主流框架方面的面试题&#xff0c;安排&#xff01; 这篇文章分享了gRPC、GoFrame、GoZero、GoMicro、GORM、Gin等主流框架的30道面试题和详解。 需要大厂面经的朋友们也可以直接加我好友&#xff0c;私信我。 gRPC 1.gRPC是什么&#xff…

@JsonRawValue 注解

这里写目录标题 1. 问题2. JsonRawValue 注解说明 1. 问题 在实际开发中我遇到这样一个问题&#xff0c;查询数据库的结果返回的content内容是含有转移符的JSON字符串&#xff0c;但是我需要返回的不包含转移的String字符串。经过我一顿折腾并未发现解决办法&#xff0c;直到J…

node.js+兰空图床实现随机图

之前博客一直用的公共的随机图API&#xff0c;虽然图片的质量都挺不错的&#xff0c;但是稳定性都比较一般&#xff0c;遂打算使用之前部署的兰空图床&#xff0c;自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作&#xff0c;有兴趣的话可…

MySQL binlog的三种模式

MySQL 的 binlog&#xff08;Binary Log&#xff09; 默认的模式是 STATEMENT&#xff0c;即 语句模式。在这种模式下&#xff0c;MySQL 会记录所有对数据库执行的数据修改操作&#xff08;如 INSERT、UPDATE、DELETE 等&#xff09;的 SQL 语句。 1. binlog 的三种模式 MySQL…

25农村发展研究生复试面试问题汇总 农村发展专业知识问题很全! 农村发展复试全流程攻略 农村发展考研复试真题汇总

农村发展复试当然有好的建议&#xff01;前提是复试重点面试题背好&#xff01; 你是不是也在为农村发展考研复试发愁&#xff1f;担心自己准备不充分、表现不好&#xff1f;别急&#xff01;今天&#xff0c;学姐——复试面试拿下90分成功上岸的学姐&#xff0c;来给大家分享…

读取本地excel并生成map,key为第一列,value为第二列

添加依赖&#xff1a;在 pom.xml 文件中添加以下依赖&#xff1a; <dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency&…

代码随想录算法【Day44】

Day44 1143.最长公共子序列 class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() 1, vector<int>(text2.size() 1, 0));for (int i 1; i < text1.size(); i) {for (int j 1; …

【transformers.Trainer填坑】在自定义compute_metrics时logits和labels数据维度不一致问题

问题描述 我在使用 transformers.Trainer 训练我的模型时&#xff0c;我自定义了 compute_loss 函数和compute_metrics函数&#xff0c;我的模型是一个简单的二分类模型。 在自定义 compute_loss 时这样写的&#xff1a; def compute_loss(self, model, inputs, return_outp…

论文学习记录之《CLR-VMB》

目录 一、基本介绍 二、介绍 三、方法 3.1 FWI中的数据驱动方法 3.2 CLR-VMB理论 3.3 注意力块 四、网络结构 4.1 网络架构 4.2 损失函数 五、实验 5.1 数据准备 5.2 实验设置 5.3 训练和测试 5.4 定量分析 5.5 CLR方案的有效性 5.6 鲁棒性 5.7 泛化性 六、讨…

【STM32】舵机SG90

1.舵机原理 舵机内部有一个电位器&#xff0c;当转轴随电机旋转&#xff0c;电位器的电压会发生改变&#xff0c;电压会带动转一定的角度&#xff0c;舵机中的控制板就会电位器输出的电压所代表的角度&#xff0c;与输入的PWM所代表的角度进行比较&#xff0c;从而得出一个旋转…

算法刷题-链表系列-移除链表、设计链表、翻转列表

题目要求 所有主要考察对链表的增删查改的功能 总结 对于有些从头遍历到尾的方法&#xff0c;创建一个头结点使得所有的结点能以统一的方式且全部被遍历到&#xff0c;不会出现头结点不被遍历的问题。对于遍历的条件&#xff0c;有的时候curNode ! nullptr&#xff0c;有的时…

Django项目中创建app并快速上手(pycharm Windows)

1.打开终端 我选择的是第二个 2.运行命令 python manage.py startapp 名称 例如&#xff1a; python manage.py startapp app01 回车&#xff0c;等待一下&#xff0c;出现app01的文件夹说明创建成功 3.快速上手 1.app注册 增加一行 "app01.apps.App01Config"&#…

Windows系统安装搭建悟空crm客户管理系统 教程

1、在安装悟空 CRM 之前&#xff0c;需要确保你的 Windows 系统上已经安装了以下软件&#xff1a; Web 服务器&#xff1a;推荐使用 Apache 或 Nginx&#xff0c;这里以 Nginx 为例。你可以使用集成环境套件如 XAMPP 来简化安装过程&#xff0c;它包含了 Nginx 、MySQL、PHP 等…

深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决

在深度学习框架中&#xff0c;TensorFlow 和 PyTorch 无疑是两大明星框架。前面两篇文章我们分别介绍了 TensorFlow&#xff08;点击查看&#xff09; 和 PyTorch&#xff08;点击查看&#xff09;。它们引领着 AI 开发的潮流&#xff0c;吸引着无数开发者投身其中。但这两大框…

java每日精进 2.13 Ganache(区块链本地私有化部署)

需求&#xff1a;使用区块链实现数据村存储&#xff0c;记录一些不可篡改的交互信息&#xff0c;网络环境为内外网均需要部署&#xff1b; 1.准备工作&#xff08;软件安装&#xff09; 1.1 安装 Node.js 和 npm 1.2 安装 Ganache 地址如下&#xff1a;windows有可视化界面 &a…