热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何优化Webpack打包后的代码分割

本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。

  • 源代码index.js里包含2部分
  • ① 业务逻辑代码 1mb
  • ② 引入(如lodash包)的代码 1mb
  • 若更新了业务逻辑代码,但在浏览器运行时每次都下载2mb的index.js显然不合理,第三方包是不会变的

手动拆分


  • webpack.base.js

entry: {main: path.resolve(__dirname, "../src/index.js"),loadsh: path.resolve(__dirname, "../src/lodash.js"),
},

  • lodash.js

import _ from 'lodash'
window._ = _

  • index.js

const res = _.join('test', 1)
console.log(1, res)

  • 打包后index.html

<script type&#61;"text/Javascript" src&#61;"js/main.js"></script>
<script type&#61;"text/Javascript" src&#61;"js/loadsh.js"></script>

在这里插入图片描述


使用webpack插件


https://webpack.docschina.org/plugins/split-chunks-plugin/#defaults


  • 配置optimization
  • 依然在index.js中引入lodash.js

entry: {main: path.resolve(__dirname, "../src/index.js"),
},
optimization: {splitChunks: {chunks: &#39;all&#39; // 同步/异步代码都要做分割}
},

在这里插入图片描述


异步代码


  • index.js

// 异步代码
// 只有执行createElement函数时才会引入lodash&#xff0c;打开打包后的index.html才会下载0.js
// 若不执行则不下载
// 异步代码不管是否执行&#xff0c;编译都会生成0.js
function createElement() {return import(&#39;lodash&#39;).then(({ default: _ }) &#61;> {const res &#61; _.join([1, 2, 3], &#39;*&#39;)const div &#61; document.createElement(&#39;div&#39;)div.innerText &#61; resreturn div})
}
createElement().then((div) &#61;> {document.body.appendChild(div)
})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


  • 注意&#xff0c;异步代码webpack.base.js中不需要配置optimization
  • 打开页面时&#xff0c;0.js会延迟一点下载

代码分割重命名


  • import前添加注释webpackChunkName: "my-loadsh"

function createElement() {return import(/* webpackChunkName: "my-loadsh" */ &#39;lodash&#39;).then(({ default: _ }) &#61;> {const res &#61; _.join([1, 2, 3], &#39;*&#39;)const div &#61; document.createElement(&#39;div&#39;)div.innerText &#61; resreturn div})
}
createElement().then((div) &#61;> {document.body.appendChild(div)
})

在这里插入图片描述


vendors从哪来&#xff1f;


  • webpack.base.js 配置cacheGroups后

optimization: {splitChunks: {chunks: &#39;all&#39;,cacheGroups: {vendors: false,default: false,}}
},

在这里插入图片描述


  • 可配置&#xff1a;
  • minSize 对多大的文件分割打包
  • minChunks 在入口中引入模块次数>&#61; n时才会做代码分割

推荐阅读
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 基于JQuery实现的评分插件
    本文介绍了一个使用JQuery创建的交互式评分控件。当用户将鼠标悬停在星星上时,左侧的星星会变为实心,右侧保持空心,并显示对应的评分等级;移开鼠标后,所有星星恢复为空心状态。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文介绍如何将自定义项目设置为Tomcat的默认访问项目,使得通过IP地址访问时直接展示该自定义项目。提供了三种配置方法:修改项目路径、调整配置文件以及使用WAR包部署。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本文介绍了如何利用Python进行批量图片尺寸调整,包括放大和等比例缩放。文中提供了详细的代码示例,并解释了每个步骤的具体实现方法。 ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
author-avatar
ALL_TTDD
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有