热门标签 | 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时才会做代码分割

推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
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社区 版权所有