external

webpack可以通过将第三方包,比如antd、vue、react等等,可以提取到vendor中,vendor会越来越大,导致打包时间越来越长,这个时候就可以用到externals功能。将指定的内容在vendor中剥离出来,这样构建时间会减少很多。

DLL

有一些第三方包构建时间长,我们可以提前构建好,然后之后打包的时候直接用,就可以减少打包时间了,webpack5已经内置。

按需加载

按照路由进行按需加载,部分页面在访问时采取加载对应的代码,配合路由库实现。原理利用jsonp动态生成script标签,创建promise,监听onload时间去resolve

splitChunks

提取公共代码,防止重复打包。

多线程打包

利用happy-pack、thred-loader,利用nodejs的cluster多进程编译,webpack4已经集成。

tree-shaking

针对于ESModule,只打包编译用到的代码,忽略没有用到的。但是commonjs效果不好,因为他是运行时加载,而ESM效果好,因为是静态分析,编译时加载,能提前知道哪些代码是不要的。

cache-loader,对开销很大的loader使用,缓存编译
ts-loader开启多线程、跳过类型检查
js代码压缩使用esbuilder代替terser