欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Vue.js中用webpack合并打包多個(gè)組件并實(shí)現(xiàn)按需加載

前言

堅(jiān)守“ 做人真誠(chéng) · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都石雕小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站制作營(yíng)銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

隨著移動(dòng)設(shè)備的升級(jí)、網(wǎng)絡(luò)速度的提高,用戶對(duì)于web應(yīng)用的要求越來越高,web應(yīng)用要提供的功能越來越。功能的增加導(dǎo)致的最直觀的后果就是資源文件越來越大。為了維護(hù)越來越龐大的客戶端代碼,提出了模塊化的概念來組織代碼。webpack作為一種模塊化打包工具,隨著react的流行也越來越流行。

使用 Vue 開發(fā)項(xiàng)目時(shí),如果要使用其單文件組件特性,必然要使用 webpack 或者 browserify 進(jìn)行打包,對(duì)于大型應(yīng)用,為了提升加載速度,可以使用 webpack 的 code split 功能進(jìn)行分割打包,生成較小的模塊并按需加載,這在 Vue 文檔及 vue-router 文檔中均有介紹:Async Components、Lazy Loading。

webpack 的 code split 可以使用 webpack 的 require.ensure 特殊語法或者使用 AMD 風(fēng)格的 callback-require 語法,以 AMD 風(fēng)格的 callback-require 語法為例——

全局注冊(cè) Async Component:

let myAsyncComponent = resolve => {
 require(['./my-async-component'], resolve)
}
Vue.component('async-webpack-example', myAsyncComponent)

局部注冊(cè) Async Component,單文件組件中 script 塊內(nèi)容:

let myAsyncComponent = resolve => {
 require(['./my-async-component'], resolve)
}

// Vue 擴(kuò)展實(shí)例選項(xiàng),其他選項(xiàng)略
export default {
 components: {
 'async-webpack-example': myAsyncComponent
 }
}

在使用 vue-router 時(shí),為實(shí)現(xiàn)不同路由下的組件異步加載,在路由映射中可以使用同樣的方式來設(shè)置路由項(xiàng)的 component 屬性。

這里的 myAsyncComponent 被定義為一個(gè)工廠函數(shù),在需要時(shí)才會(huì)以 Vue 或者 vue-router 定義的用于解析組件選項(xiàng)的 resolve 回調(diào)函數(shù)(是的,在 Vue 和 vue-router 中有兩個(gè)不同的解析組件選項(xiàng)的函數(shù))為參數(shù)執(zhí)行 callback-require 函數(shù)(resolve 回調(diào)函數(shù)的參數(shù)是組件選項(xiàng)),這樣,在執(zhí)行打包腳本時(shí),my-async-component.vue 文件會(huì)被單獨(dú)打包成一個(gè)文件,并且僅當(dāng)該組件被使用時(shí)才會(huì)加載。

當(dāng)要求異步加載的組件較多時(shí),將會(huì)生成更多的單個(gè)文件,對(duì)于前端性能而言,雖然每個(gè)文件更小了,但可能意味著更多的網(wǎng)絡(luò)連接建立和關(guān)閉的開銷,因此在前端優(yōu)化的實(shí)踐中,通常需要在文件數(shù)量和單個(gè)文件大小之間取得平衡。

本文介紹如何將多個(gè)組件合并打包成一個(gè)單獨(dú)的文件,一方面可以減少代碼塊的數(shù)量,另一方面,如果合并打包的這些組件在不同地方多次重復(fù)使用,由于 Vue 的緩存機(jī)制,可以加快后續(xù)組件的加載速度,并且如果這些通用組件長(zhǎng)時(shí)間不會(huì)變化(如 UI 相關(guān)的組件),打包生成的文件也長(zhǎng)期不會(huì)變化,可以充分利用瀏覽器的緩存功能,實(shí)現(xiàn)前端加載速度的優(yōu)化。

先上效果圖,在使用 vue-router 的 SPA 應(yīng)用中,將除根路由之外的路由項(xiàng)對(duì)應(yīng)的 ComponentA、ComponentB、ComponentC 等三個(gè)組件合并打包成一個(gè)文件。初次加載頁面時(shí),從開發(fā)者工具的 Network 面板上可以看到,此時(shí)未加載包含 ComponentA、ComponentB、ComponentC 這三個(gè)組件的 0.a5a1bae6addad442ac82.js 文件,當(dāng)點(diǎn)擊 Page A 鏈接時(shí),加載了該文件,然后再點(diǎn)擊 Page B、Page C 鏈接時(shí),沒有重新加載該文件。

Vue.js中用webpack合并打包多個(gè)組件并實(shí)現(xiàn)按需加載

我們首先通過 vue-cli 命令行工具使用 webpack 項(xiàng)目模板創(chuàng)建一個(gè)包含 vue-router 的項(xiàng)目,在其 src/components 目錄下創(chuàng)建一個(gè) CommonComponents 目錄,在該目錄中創(chuàng)建 ComponentA、ComponentB、ComponentC 這三個(gè)組件。

Vue.js中用webpack合并打包多個(gè)組件并實(shí)現(xiàn)按需加載

同時(shí)在 CommonComponents 目錄下創(chuàng)建 index.js,其內(nèi)容如下:

exports.ComponentA = require('./ComponentA')
exports.ComponentB = require('./ComponentB')
exports.ComponentC = require('./ComponentC')

這樣,我們只需要使用 webpack 的 require.ensure 特殊語法或者使用 AMD 風(fēng)格的 callback-require 語法異步加載 CommonComponents 目錄下的 index.js,在使用 webpack 進(jìn)行打包時(shí),就可以實(shí)現(xiàn)將 ComponentA、ComponentB、ComponentC 這三個(gè)組件合并打包。以 AMD 風(fēng)格的 callback-require 語法為例示范如下,這里的 callback 回調(diào)函數(shù)的形式?jīng)]有任何特殊要求。

require(['component/CommonComponents'], function (CommonComponents) {
 // do whatever you want with CommonComponents
})

component/CommonComponents 模塊加載成功時(shí),這里的回調(diào)函數(shù)中的 CommonComponents 參數(shù)將會(huì)是一個(gè)包含 ComponentA、ComponentB、ComponentC 這三個(gè)組件選項(xiàng)的對(duì)象。

在定義異步解析組件時(shí),我們使用的是一個(gè)工廠函數(shù) resolve => {require(['./my-async-component'], resolve)},如果需要在路由配置文件中添加 component 屬性為 ComponentA 組件的路由項(xiàng),應(yīng)該定義什么樣的工廠函數(shù)呢?記住這里的 resolve 是一個(gè)用于解析組件選項(xiàng)的回調(diào)函數(shù),其參數(shù)是所獲取的組件選項(xiàng),而上一段代碼中的 CommonComponents 恰好是包含若干個(gè)組件選項(xiàng)的對(duì)象,因此我們可以將 CommonComponents 的子屬性作為參數(shù)用于 resolve 調(diào)用,我們編寫一個(gè)函數(shù) getCommonComponent,用于根據(jù)組件名稱返回獲取相應(yīng)的組件選項(xiàng)的工廠函數(shù)。

let getCommonComponent = componentName => resolve => require(['components/CommonComponents'], components => resolve(components[componentName]))

在組件模板或者路由映射等使用其中某一個(gè)組件的地方,可以使用類似于 getCommonComponent('ComponentA') 這樣的函數(shù)調(diào)用進(jìn)行組件設(shè)置,在路由映射中的使用示例如下:

routes: [
 {
 path: '/',
 name: 'Hello',
 component: Hello
 },
 {
 path: '/a',
 name: 'A',
 component: getCommonComponent('ComponentA')
 },
 {
 path: '/b',
 name: 'B',
 component: getCommonComponent('ComponentB')
 },
 {
 path: '/c',
 name: 'C',
 component: getCommonComponent('ComponentC')
 }
]

最終打包生成的文件列表如下圖所示,其中的 0.a5a1bae6addad442ac82.js 包含了 ComponentA、ComponentB、ComponentC 這三個(gè)組件。

Vue.js中用webpack合并打包多個(gè)組件并實(shí)現(xiàn)按需加載

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。

新聞名稱:Vue.js中用webpack合并打包多個(gè)組件并實(shí)現(xiàn)按需加載
瀏覽路徑:http://chinadenli.net/article0/jhjgio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)網(wǎng)站改版App設(shè)計(jì)做網(wǎng)站網(wǎng)站設(shè)計(jì)自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)