草庐IT

webpack调优技巧

池月 2023-03-28 原文

webpack优化主要有三个方面:1.提高构建速度,2.减少打包体积,3.优化用户体验

提高构建速度:

  1. 启用多线程
    thread-loader
    使用thread-loader插件可以启用多线程进行构建。

  2. 使用缓存
    cache-loader
    使用cache-loader插件可以对构建进行缓存,加快后续的构建速度。

  3. 热更新
    热更新只更新改动的代码文件,无需编译整个项目。

  4. exclude&include
    exclude选项是构建时忽略的文件,include选项是构建时需要构建的文件。配置好exclude和include,可以避免对不必要的文件进行构建。

减少打包体积

  1. 压缩css代码
    css-minimizer-webpack-plugin

  2. 压缩js代码
    terser-webpack-plugin

  3. tree-shaking
    tree-shaking就是只编译需要的代码。
    webpack5该特性默认启用。

  4. source-map
    source-map帮助在源代码中定位bug。
    开发模式使用更精确但体积更大的source-map

module.exports = {
  mode: 'development',
  devtool: 'eval-cheap-module-source-map'
}

生产模式使用体积小但不那么精确的source-map

module.exports = {
  mode: 'production',
  devtool: 'nosources-source-map'
}
  1. 打包分析
    webpack-bundle-analyzer插件可以看到各个文件的打包大小,帮助对对应的文件进行优化

优化用户体验

  1. 延迟加载模块
    在vue中,用下面箭头函数的方式引入模块,就可以按需加载模块。react的延迟加载和vue类似,angular也有自己的延迟加载方式。
// src/router/index.js
const routes = [
  {
    path: '/login',
    name: 'login',
    component: login
  },
  {
    path: '/home',
    name: 'home',
    // lazy-load
    component: () => import('../views/home/home.vue'),
  },
]
  1. Gzip
    最常见的压缩文件的算法。可以在网络传输中压缩数据,加快传输速度。需要后端的配合。
    插件 compression-webpack-plugin

  2. base64
    小图片可以转成base64嵌进代码中,减少http请求数量。
    插件 asset-module

  3. hash
    如下配置可以给打包文件加上hash后缀,生成hash后缀管理浏览器缓存。只要文件名和之前不同,浏览器就会向服务端重新请求文件。反之,浏览器会从协商缓存中读取文件。重新部署了项目,文件名称未修改,客户端不一定能获取到最新的代码。
    webpack会自动更改有改动的打包文件的hash后缀,可以自动实现文件的缓存管理。

output: {
    path: path.resolve(__dirname, '../dist'),
    filename: 'js/chunk-[contenthash].js',
    clean: true,
    },

有关webpack调优技巧的更多相关文章

  1. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  2. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  3. ruby-on-rails - 将 vim 与 ruby​​/ruby on rails 结合使用的提示和技巧 - 2

    我是那些没有在他的任何Ruby/RubyonRails工作中使用TextMate的开发人员之一。我在这个领域的特别忠诚在于vim。您最喜欢将vim与Ruby和/或RubyonRails结合使用以尽可能提高工作效率的提示/技巧是什么? 最佳答案 最重要获取rails.vim的副本它在数百万级别上很棒。Readthedoc.提示太多了,:Rviewcustomer,:RSmodelfoo,:Rinvert,gf,:Rextract,:Rake等等。您可能需要NERDTree以及轻松导航(您可以使用:Rtree访问)第二重要在推特上关注t

  4. chatGPT问答之 Webpack 5 多入口打包如何指定打包文件名规定的文件名 - 2

    前言chatGPT越来越令人惊奇,有一些答案在百度上搜半天却找不到你想要的,但与chatGPT的聊天中就可以非常快的得到你想要的结果,不得不说人工智能很好用下面就是我与chatGPT的聊天内容chatGPT问答之Webpack5多入口打包如何指定打包文件名规定的文件名问1:Webpack5多入口打包如何指定打包文件名为规定的文件名答1:在Webpack5中,可以使用output.filename选项来指定多入口打包后的文件名规则。output.filename可以是一个字符串,也可以是一个函数。如果output.filename是一个字符串,可以使用占位符来指定打包后的文件名规则,例如:mod

  5. 嵌入式单元测试工具Tessy的一些测试技巧 - 2

    最近做了一个平台项目,需要进行动态代码测试,入门了嵌入式单元测试工具Tessy,总结了一些简单的测试技巧。当前网上的教程普遍只写内容概要,真正入手还得自己认真摸索一番。为此,特意总结了一些Tessy测试技巧以供有缘人参考。提几个Tessy工具使用的问题。1.如何导入工程的头文件?2.如何解决文件内存在汇编语言代码分析时候报错的问题?3.如何规避本文件创建却不使用的函数,宏和变量,在执行executetest出现的undefinedreferencetoxx的问题?4.如何创建测试用例testcase?5.为什么testcase的结果输出与期望不一致?6.创建testcase的方法有几种?7.C

  6. SQL Server注入技巧与提权方式详解 - 2

    目录前言一、SQLServer基础1.SQLServer2012安装启动navicat远程连接2.SQLServer概念数据库的组成数据库中常用对象默认库介绍3.T-SQL语言创建数据库创建表插入数据基础语法总结4.sqlserver权限新建用户并赋予权限权限总结二、Sqlserver手工注入环境搭建注入手法1.联合查询2.报错注入3.布尔盲注4.延时注入三、SQlserver提权getshellxp_cmdshell执行系统命令sp_oacreate执行系统命令使用CLR执行系统命令数据库差异备份写webshell日志差异备份写webshell前言本文详细的介绍了SqlServer安全基础,

  7. javascript - Webpack - 忽略 require() 中的加载器? - 2

    我有一个与Webpack捆绑在一起的TypeScript项目。这是我正在编写的开源库的演示/文档应用程序,因此我想将一些源代码显示为文档的一部分。在我的webpack配置中我有:loaders:[{test:/\.ts$/,loader:'ts'},{test:/\.css$/,loader:'style!raw'},{test:/\.html/,loader:'html'}]这非常适合转译和捆绑我的TypeScript文件。在我的一个应用程序组件中,我这样做:basicCodeT:string=require('./basic-example-cmp.html');basicCode

  8. javascript - Webpack:如何驯服不符合 npm 的 js 库 - 2

    我有如下初始化自己的js库:(function(root){............})(this)当使用webpack构建时,我得到类似的东西function(module,exports){(function(root){})(this)}“this”不是库假设的窗口。有没有一种巧妙的方法可以使这种类型的库与webpack一起工作?我的最后一招是使用poSTLoader或其他东西将this替换为window。 最佳答案 是的,我们称这些为“损坏的模块”,因为正如您所说,它们只是在全局上下文中执行,有几种不同的方法可以填充这些类型

  9. javascript - Webpack 捆绑许可证合规性? - 2

    有没有办法使用webpack执行许可证合规性检查?理想情况下,由webpack构建的所有模块的许可header都包含在最终输出文件中,但我们如何检查是否是这种情况?还有可以检测许可证兼容性冲突的插件吗? 最佳答案 我不是律师,所以这不是法律建议。您似乎在尝试解决两个不同的问题:(1)了解通过npm安装的软件包的合规义务,(2)履行任何义务(例如,在webpack的输出中包含许可证)。对于(1)tldrlegal是一个有用的工具,可以打印义务的高级摘要。由于义务可能包括诸如“在所有广告Material中显示确认”之类的要求,因此很难将

  10. javascript - 我可以使用 Webpack 将 Google Charts 注入(inject)我的项目吗? - 2

    有什么方法可以在React应用程序中使用GoogleCharts吗?我找到了react-google-charts我已经开始工作了,但它似乎缺少很多GoogleCharts的API,或者至少没有记录。我也有点害羞地在生产中使用NPM统计数据显示在过去一天只有~400次下载的东西。但是,我无法在NPM上单独找到GoogleCharts,也无法像我最初预期的那样简单地从“google-charts”导入图表。我的下一个想法是看看是否有办法将库作为全局变量导入。1)我该怎么做2)如果可能的话,我如何将它包含在像import{Line}from'???'这样的react组件中

随机推荐