摘要:第一步新建一個(gè)名字自己定義值得關(guān)注的是數(shù)組資源依賴包,提前編譯這里根據(jù)自己項(xiàng)目的具體引用情況自行添加資源依賴包,提前編譯定義文件生成的位置的部分由的名字替換輸出到那個(gè)全局變量上和一樣即可。
原因
在使用vue開(kāi)發(fā)單頁(yè)面應(yīng)用時(shí),隨著項(xiàng)目頁(yè)面的增多,你會(huì)發(fā)現(xiàn)生產(chǎn)環(huán)境的build速度會(huì)很慢,同時(shí)頁(yè)面初始的js大小越來(lái)越大。當(dāng)你無(wú)法忍受的時(shí)候就該優(yōu)化了。
思路這方面的優(yōu)化無(wú)非就是異步加載、提取一部分長(zhǎng)期不需要更新代碼的基礎(chǔ)js庫(kù)。
方案 一、異步加載(懶加載)可以采用vue-router的路由懶加載點(diǎn)擊鏈接進(jìn)行學(xué)習(xí)
二、對(duì)于提取基礎(chǔ)庫(kù)可以學(xué)習(xí)下DllPlugin和DllReferencePlugin兩個(gè)插件,同時(shí)配合(add-asset-html-webpack-plugin)一起完成提取到自動(dòng)引入。
值得關(guān)注的是lib數(shù)組(資源依賴包,提前編譯)這里根據(jù)自己項(xiàng)目的具體引用情況自行添加
const webpack = require("webpack"); const path = require("path"); const isDebug = process.env.NODE_ENV === "development"; const outputPath = isDebug ? path.join(__dirname, "../src/common/debug") : path.join(__dirname, "../src/common/dist"); const fileName = "[name]_[hash].js"; // 資源依賴包,提前編譯 const lib = [ "vue", "vuex", "vue-router", "axios", "body-parser", "cookie-parser", "weixin-js-sdk", "element-ui", "vue-scroll" ]; const plugin = [ new webpack.DllPlugin({ /** * path * 定義 manifest 文件生成的位置 * [name]的部分由entry的名字替換 */ path: path.join(outputPath, "manifest.json"), /** * name * dll bundle 輸出到那個(gè)全局變量上 * 和 output.library 一樣即可。 */ name: "[name]_[hash]", context: __dirname }), new webpack.optimize.OccurrenceOrderPlugin() ]; if (!isDebug) { plugin.push( // new webpack.DefinePlugin({ // "process.env.NODE_ENV": JSON.stringify("production") // }), new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false }, sourceMap: true }) ) } module.exports = { devtool: "#source-map", entry: { lib: lib }, output: { path: outputPath, filename: fileName, /** * output.library * 將會(huì)定義為 window.${output.library} * 在這次的例子中,將會(huì)定義為`window.vendor_library` */ library: "[name]_[hash]", libraryTarget: "umd", umdNamedDefine: true }, plugins: plugin }
簡(jiǎn)單的方式是在package.json文件中添加(需要注意的使用的是webpack2) "dll-production": "NODE_ENV=production webpack --config build/webpack.dll.config.js --progress", "dll-test": "NODE_ENV=development webpack --config build/webpack.dll.config.js --progress", 然后通過(guò)npm run dll-production 和 npm run dll-test進(jìn)行構(gòu)建 正如NODE_ENV的值一樣不同環(huán)境引用不同路徑下的lib.js 構(gòu)建后目錄如下圖
#安裝add-asset-html-webpack-plugin $ npm install --save-dev add-asset-html-webpack-plugin
修改開(kāi)發(fā)環(huán)境webpack.dev.config.js
#初始化 const AddAssetHtmlPlugin = require("add-asset-html-webpack-plugin") 在plugins中添加 new webpack.DllReferencePlugin({ context: __dirname, manifest: require(path.join(__dirname, "../src/common/debug/manifest.json")) }), new AddAssetHtmlPlugin({ filepath: path.resolve(__dirname, "../src/common/debug/lib_*.js") }),
執(zhí)行npm run dev
修改生產(chǎn)環(huán)境webpack.prod.config.js
#初始化 const AddAssetHtmlPlugin = require("add-asset-html-webpack-plugin") 在plugins中添加 new webpack.DllReferencePlugin({ context: __dirname, manifest: require(path.join(__dirname, "../src/common/dist/manifest.json")) }), new AddAssetHtmlPlugin({ filepath: path.resolve(__dirname, "../src/common/dist/lib_*.js") }),
執(zhí)行npm run build(同時(shí)與以前的構(gòu)建速度對(duì)比,你會(huì)發(fā)現(xiàn)節(jié)省了很多時(shí)間,目前我的項(xiàng)目省了1/3時(shí)長(zhǎng))
dll-plugin與CommonsChunkPlugin(webpack4中替換為SplitChunksPlugin)區(qū)別共同點(diǎn):都是提取公共模塊到父模塊中,利用緩存來(lái)提高訪問(wèn)速度(第一次加載除外)
區(qū)別:dll-plugin需要手動(dòng)去配置和打包公共模塊,CommonsChunkPlugin則是每次構(gòu)建時(shí)按照配置打包公共模塊。
使用 DllPlugin 將更改不頻繁的代碼進(jìn)行多帶帶編譯。這將改善引用程序的編譯速度,即使它增加了構(gòu)建過(guò)程的復(fù)雜性。
webpack文檔也推薦使用dll-plugin進(jìn)行公共模塊的分離。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/91742.html
摘要:為了讓事情更簡(jiǎn)單,允許將組件定義為一個(gè)工廠函數(shù),動(dòng)態(tài)地解析組件的定義。只在組件需要渲染時(shí)觸發(fā)工廠函數(shù),并且把結(jié)果緩存起來(lái),用于后面的再次渲染。 庫(kù)使用情況 vue vue-router axios muse-ui material-icons vue-baidu-map 未優(yōu)化前 首先我們?cè)谡G闆r下buildshowImg(https://segmentfault.com/img...
摘要:第一步新建一個(gè)名字自己定義值得關(guān)注的是數(shù)組資源依賴包,提前編譯這里根據(jù)自己項(xiàng)目的具體引用情況自行添加資源依賴包,提前編譯定義文件生成的位置的部分由的名字替換輸出到那個(gè)全局變量上和一樣即可。 原因 在使用vue開(kāi)發(fā)單頁(yè)面應(yīng)用時(shí),隨著項(xiàng)目頁(yè)面的增多,你會(huì)發(fā)現(xiàn)生產(chǎn)環(huán)境的build速度會(huì)很慢,同時(shí)頁(yè)面初始的js大小越來(lái)越大。當(dāng)你無(wú)法忍受的時(shí)候就該優(yōu)化了。 思路 這方面的優(yōu)化無(wú)非就是異步加載、提...
摘要:發(fā)布是由團(tuán)隊(duì)開(kāi)源的,操作接口庫(kù),已成為事實(shí)上的瀏覽器操作標(biāo)準(zhǔn)。本周正式發(fā)布,為我們帶來(lái)了,,支持自定義頭部與腳部,支持增強(qiáng),兼容原生協(xié)議等特性變化。新特性介紹日前發(fā)布了大版本更新,引入了一系列的新特性與提升,本文即是對(duì)這些變化進(jìn)行深入解讀。 showImg(https://segmentfault.com/img/remote/1460000012940044); 前端每周清單專注前端...
閱讀 2013·2021-09-30 09:53
閱讀 1855·2021-09-24 09:48
閱讀 1765·2019-08-30 14:01
閱讀 2176·2019-08-29 18:35
閱讀 1258·2019-08-26 18:27
閱讀 2987·2019-08-26 12:12
閱讀 955·2019-08-23 17:16
閱讀 950·2019-08-23 15:31