webpack5 基础配置(性能优化)12 DLL Terser Scope Hoisting

认识DLL库(了解)

DLL全称是 动态链接库,是为软件在winodw种实现共享函数库的一种实现方式,而Webpack也内置了DLL的功能,为的就是可以共享,不经常改变的代码,抽成一个共享的库。这个库在之后的编译过程中,会被引入到其他项目的代码中。
比如,我们可以对react/react-dom进行单独编译成一个dll库,然后在接下来的要使用react的项目中直接引入这个库,因为react/react-dom已经编译过了的,所以不用再对react进行编译。vue等等也可以。

DLL使用分成两部

1 单独打包成一个dll库
2 项目中引入DLL库
在升级到webpack4,react和vue都移除了dll,为什么,因为webpack4已经提供了足够的性能,所以他们认为没有必要对dll这个库再去维护,花费时间。

如何打包DLL库

比如打包一个react的dll库
在这里插入图片描述
需要引用webpack内置的一个插件,DLLPlugin
执行npm run build就可以了
怎么使用?
把打包的包copy到需要的项目,然后在weback中进行配置。也是通过插件。
也是webpack的内置插件,dllReferencePlugin
在这里插入图片描述然后打包
在这里插入图片描述
可以看到没有vendors文件了,没有第三方库,所以DLL库配置成功了。
但是打包后的js是没有react的代码的,所以会报错。所以我们打包后的react后的js文件,应该使用一个插件cnpm isntall add-seest-html-wepack-plugin
在这里插入图片描述
让dll这个包插入到html的模板中,然后把dll这个包复制到Build里面去。在这里插入图片描述
在这里插入图片描述
现在就打包成功了。

认识Terser(优化工具)

独立的工具,不依赖于webpack,webpack使用需要借助插件。
terset是一个js的解释,绞肉机/压缩机的工具集。比如我们的大肉经过绞肉机后就变成一块一块的小肉。代码的解释就是,比如我们有个函数名字非常长,如果不做任何优化,转化后的代码也是比较大。所以需要terser工具来进行一个转化,使其打包后的文件变小。以前是称为丑化,现在是tersetr(绞肉机),还有个压缩机的解释是会解决掉dead_code,就是无意义的代码,比如if(false)console.log()。不可达的代码就是无意义的代码
terser就是可以对你的代码进行解析,然后丑化,最后压缩的一个工具集,可以让我们的bundle.js变得更小
早期是使用uglify-js,现在不在维护了,而且不支持es6。

Terser基本使用

cnpm install terser
这样安装其实也安装了他的cli工具。
npx terser ./src/abc.js -o abc.min.js
npx terser 输入的文件 -o 输入的文件 xxx后面可以跟参数
在这里插入图片描述
在这里插入图片描述
因为我们没有传参数,所以他只是把空格全都删掉了。
如果想把某些代码做特殊的处理,可以传额外的参数。
在这里插入图片描述
npx terser ./src/abc.js -o abc.min.js -c defaults在这里插入图片描述
使用默认配置的话也是没有做多大转化。
但它会把类或者对象的函数转成箭头函数
在这里插入图片描述
在这里插入图片描述
-m丑化
npx terser ./src/abc.js -o abc.min.js -c defaults -m
在这里插入图片描述
可以看到已经做了形参的转化了。
更多的参数可以去官网看看。一般都是设置默认就行

terser在webpack的配置

在webpack有一个optimization.minimizer的属性(optimization是webpack用于优化的属性),在Production模式下,默认就是使用TerserPlugin来处理代码的,所以我们每次Build之后代码都会被压缩。如果对默认的配置不满意,我们可以自己配置minimizer属性,覆盖默认的配置。
其实react默认Production的时候,不仅仅使用TerserPlugin,还有很多其他的插件一些做优化。
在这里插入图片描述
minimizer默认已经配置了TerserPlugin,并且webpack内部也已经内置了这个插件。
在这里插入图片描述
new TerserPlugin({})里面可以配置很多属性,如parallel: true,如果你电脑有多个内核,会多线程运行你的代码。extractComments:false,是否把注释单独抽离到一个包里面。默认是false。terserOptions: {} //可以配置自己想要的配置,里面也可以配置很多刚才terset的参数。在这里插入图片描述
一般我们使用默认的配置就行。

小结,我们可以在webpack中引入TerserPlugin,这个在webpack5已经是内置了,所以在optimization.minimizer里面配置即可。他默认是对我们所有的js代码进行丑化,减小打包后bundle.js包的体积。提高性能。

CSS的优化

在这里插入图片描述
打包后的css也没有压缩。但是css的优化一般都是压缩空格,不会改变类名。一般使用
css-minimizer-webpack-plugin插件。
cnpm install css-minimizer-webpack-plugin -D
也是在生产模式下做封装。在这里插入图片描述
直接在plugin里面new,在这里插入图片描述
打包之后可以看到已经生效了。

小结,css的文件可以通过css-minimizer-webpack-plugin插件来压缩空格等等,减少体积。

认识 Scope Hoisting

Scope Hoistins是wepbpack3新增的功能,作用是对作用域进行提升,并且让webpack打包后的代码更小。运行更快。
我们之前看过源码,webpack打包会有很多的函数作用域。因为他是利用函数作用域来实现一个模块化。而且有大量的闭包,闭包太多性能是比较低的。scope hoisting可以将函数合并到一个模块中来运行。
在生产模式下,该插件是默认开启的/在这里插入图片描述
设置生产模式下的默认配置,有这个插件的使用。
在开发模式下使用也很简单
在这里插入图片描述
因为webpack已经内置过了,直接在Plugin属性上使用即可。
当我们配置后,打包后的文件会变得比较少。在这里插入图片描述
可以看到调用的已经在同一个作用域了,看过之前源码的应该知道,如果普通开发模式下,我们是得通过闭包,将路劲放入webpack-require函数,然后这个函数再去调用wbepack-exports对象,在对象里面给我们的export去做代理或者赋值,然后再返回,才能拿到我们的函数来调用,而一旦使用这个插件后,可以看到他们两个的作用域已经是一样的了。这也是性能优化的地方。
注意事项: 内部的原理依赖于静态分析。esmodul是静态分析的,而commonjs是动态分析的。所以该插件是依赖于静态分析的,通过分析判断能不能进行作用域提升。如果我们的项目不是commonjs,那么我们的插件就可能发挥不了多大功能。所以建议以后尽量使用esmodule。而且引入第三方库时,最好也是通过esmodule导入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Webpack是一个用于打包前端应用程序的工具,可以将多个模块打包成一个或多个文件,同时还支持代码分离、模块化、压缩等功能。下面是Webpack的基本配置和优化代码的说明: 1. 基本配置 (1)entry:入口文件,Webpack会从该文件开始递归解析依赖,生成打包后的文件。 (2)output:输出文件配置,指定打包后生成的文件路径和名称。 (3)module:模块加载器配置,用于加载各种类型的文件,如js、css、图片等。 (4)plugins:插件配置,用于扩展Webpack功能,如压缩代码、提取公共模块、生成HTML模板等。 (5)devServer:开发服务器配置,可以自动编译代码并提供热更新等功能。 (6)resolve:模块解析配置,用于配置模块的搜索路径、别名等。 2. 优化代码 (1)使用Tree Shaking:Tree Shaking是Webpack 2引入的功能,用于去除无用的代码。只有被使用的代码才会被打包进最终的文件。 (2)使用Code Splitting:将代码拆分成多个块,按需加载,可以提高页面加载速度。 (3)使用动态导入:使用import()函数动态加载代码,可以根据需要加载不同的模块,提高性能。 (4)使用缓存:使用缓存可以避免重复打包已经打包过的代码,提高打包速度。 (5)使用异步加载:异步加载可以提高页面加载速度,特别是在处理大型应用程序时更为重要。 (6)使用压缩插件:压缩代码可以减小文件大小,提高加载速度。 (7)使用静态资源CDN:使用CDN可以将静态资源分布到多个服务器上,提高访问速度,减少服务器负载。 总之,通过合理的配置和优化,可以大大提高Webpack的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderlin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值