詳解webpack編譯速度提升之DllPlugin
一、前言
The DllPlugin and DllReferencePlugin provide means to split bundles in a way that can drastically improve build time performance.
DllPlugin
結(jié)合 DllRefrencePlugin
插件的運(yùn)用,對(duì)將要產(chǎn)出的bundle文件進(jìn)行拆解打包,可以很徹底地加快webpack的打包速度,從而在開發(fā)過(guò)程中極大地縮減構(gòu)建時(shí)間。
二、構(gòu)建效果
結(jié)論先行: 使用 DllPlugin
和 DllRefrencePlugin
進(jìn)行構(gòu)建,可以縮減50%~70%的構(gòu)建時(shí)間。
參考Demo: dllplugin-demo
2.1 使用DllPlugin前的構(gòu)建速度
入口文件 main.js
引入了一個(gè) jQuery
文件,圖示打包耗時(shí)2.3s。
2.2 使用DllPlugin后的構(gòu)建速度
使用插件后,打包耗時(shí)0.6s,單次對(duì)比,縮減時(shí)長(zhǎng)達(dá)到73%! 2.3 如何驗(yàn)證DLLPlugin已經(jīng)生效
對(duì)比上面兩張圖打包的模塊列表,圖二有一行不一樣的輸出:
[0] delegated ./src/components/jquery.js from dll-reference vendor_57c12dcd8d9774596525 42 bytes {0} [built]
這說(shuō)明,此次的打包過(guò)程,沒有重新打包 jQuery
模塊,而是直接從 vendor_57c12dcd8d9774596525
中代理了。
三、Get Started
DllPlugin作用示意圖:
3.1 配置webpack.dll.config.js打包靜態(tài)公共資源
3.1.1 定義webpack.dll.config.js
為了減小篇幅,只帖關(guān)鍵配置內(nèi)容,詳細(xì)訪問(wèn) dllplugin-demo :
// webpack.dll.config.js module.exports = { entry: { // 定義程序中打包公共文件的入口文件vendor.js vendor: [path.resolve(src, 'js', 'vendor.js')], }, plugins: [ new webpack.DllPlugin({ // manifest緩存文件的請(qǐng)求上下文(默認(rèn)為webpack執(zhí)行環(huán)境上下文) context: process.cwd(), // manifest.json文件的輸出位置 path: path.join(src, 'js', 'dll', '[name]-manifest.json'), // 定義打包的公共vendor文件對(duì)外暴露的函數(shù)名 name: '[name]_[hash]' }) ] }
3.1.2 聲明靜態(tài)公共資源
在配置好 webpack.dll.config.js
文件之后,在 vendor.js
中聲明項(xiàng)目程序中所引用的靜態(tài)公共資源。
// vendor.js // 引入自定義在項(xiàng)目目錄中的公共資源(可以在配置中聲明alias映射關(guān)系) import 'jquery'; // or 引入npm包資源 // import 'Vue';
3.1.3 打包靜態(tài)公共資源
// cross-env模塊需要另外安裝 cross-env NODE_ENV=production webpack --config webpack.dll.config.js --colors --display-modules
根據(jù) webpack.dll.config.js
,會(huì)在指定位置生成 vendor.dll.js
文件。
3.2 配置webpack.config.js打包入口文件
生成靜態(tài)公共資源 vendor.dll.js
之后,下一步就要在入口文件中關(guān)聯(lián)引用,這項(xiàng)工作則是由 DllRefrencePlugin
完成的。
3.2.1 在webpack.config.js中關(guān)聯(lián)引用
// webpack.config.js module.exports = { entry: { // 項(xiàng)目入口文件 'app':path.resolve(src, 'js', 'main.js') }, plugins: [ // dllPlugin關(guān)聯(lián)配置 new webpack.DllReferencePlugin({ // 跟dll.config里面DllPlugin的context一致 context: process.cwd(), // dll過(guò)程生成的manifest文件 manifest: require(path.join(src, 'js', "dll", "vendor-manifest.json")) }) ] }
3.2.2 項(xiàng)目入口文件中引用靜態(tài)公共資源
// main.js // 引入的公共模塊如果在vendor中有被引用過(guò),那么編譯的時(shí)候直接使用靜態(tài)文件vendor.dll.js import $ from 'jquery'; console.log($) // import Vue from "Vue"; // console.log(Vue)
引入方式?jīng)]有什么不同的,跟平時(shí)正常引入即可。
3.2.3 項(xiàng)目模板中引用公共靜態(tài)資源
最后一步,在模板中注入 vendor.dll.js
<!-- index.html --> <script type="text/javascript" src="/src/js/dll/vendor.dll.js"></script>
如此,在接下來(lái)的本地開發(fā)(dev過(guò)程)和線上構(gòu)建過(guò)程,將不再重復(fù)靜態(tài)公共資源的構(gòu)建,極大地縮減我們的構(gòu)建時(shí)間。
結(jié)語(yǔ)
以上為webpack(Version 4)使用過(guò)程中的小小總結(jié),希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript設(shè)計(jì)模式 – 外觀模式原理與用法實(shí)例分析
這篇文章主要介紹了javascript設(shè)計(jì)模式 – 外觀模式,結(jié)合實(shí)例形式分析了javascript外觀模式基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04js window.onload 加載多個(gè)函數(shù)和追加函數(shù)詳解
本篇文章主要是對(duì)js window.onload 加載多個(gè)函數(shù)和追加函數(shù)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01原生javascript實(shí)現(xiàn)解析XML文檔與字符串
這篇文章主要介紹了javascript解析XML文檔和XML字符串的方法和具體的代碼解析,有需要的小伙伴可以參考下。2016-03-03mui 打開新窗口的方式總結(jié)及注意事項(xiàng)
這篇文章主要介紹了mui 打開新窗口的方式總結(jié)及注意事項(xiàng),需要的朋友可以參考下2017-08-08js簡(jiǎn)單實(shí)現(xiàn)讓文本框內(nèi)容逐個(gè)字的顯示出來(lái)
逐個(gè)字顯示效果就像是打印機(jī)一樣,在某些情況下起到強(qiáng)調(diào)作用,下面有個(gè)不錯(cuò)的示例,大家可以學(xué)習(xí)下2013-10-10JavaScript處理變量命名的參數(shù)對(duì)象
這篇文章主要介紹了JavaScript處理變量命名的參數(shù)對(duì)象,在開發(fā)過(guò)程中,遇到一個(gè)給對(duì)象賦值的問(wèn)題,參數(shù)是通過(guò)循環(huán)變量的方式進(jìn)行處理,接下來(lái)詳細(xì)介紹需要的小伙伴可以參考一下2022-06-06JavaScript動(dòng)態(tài)創(chuàng)建link標(biāo)簽到head里的方法
這篇文章主要介紹了JavaScript動(dòng)態(tài)創(chuàng)建link標(biāo)簽到head里的方法,分別介紹了使用jQuery的方法、使用原生javascript方法與IE特有的createStyleSheet方法等,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12