欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年02月17日 09:35:18   作者:KingMario  
對于現(xiàn)在前端插件的頻繁更新,我也是無力吐槽,但是既然入了前端的坑就得認(rèn)嘛,所以多多少少要對組件化有點了解,下面這篇文章主要給大家介紹了在Vue.js中用webpack合并打包多個組件并實現(xiàn)按需加載的相關(guān)資料,需要的朋友可以參考下。

前言

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

使用 Vue 開發(fā)項目時,如果要使用其單文件組件特性,必然要使用 webpack 或者 browserify 進(jìn)行打包,對于大型應(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 語法為例——

全局注冊 Async Component:

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

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

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

// Vue 擴展實例選項,其他選項略
export default {
 components: {
 'async-webpack-example': myAsyncComponent
 }
}

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

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

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

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

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

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

同時在 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)行打包時,就可以實現(xiàn)將 ComponentA、ComponentB、ComponentC 這三個組件合并打包。以 AMD 風(fēng)格的 callback-require 語法為例示范如下,這里的 callback 回調(diào)函數(shù)的形式?jīng)]有任何特殊要求。

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

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

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

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

在組件模板或者路由映射等使用其中某一個組件的地方,可以使用類似于 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 這三個組件。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Vue3獲取DOM節(jié)點的3種方式實例

    Vue3獲取DOM節(jié)點的3種方式實例

    Vue本來無需操作DOM來更新界面,而且Vue也不推薦我們直接操作DOM,但是我們非要拿到DOM操作DOM怎么辦,下面這篇文章主要給大家介紹了關(guān)于Vue3獲取DOM節(jié)點的3種方式,需要的朋友可以參考下
    2023-02-02
  • Vue父子組件通信全面詳細(xì)介紹

    Vue父子組件通信全面詳細(xì)介紹

    這篇文章主要介紹了React中父子組件通信詳解,在父組件中,為子組件添加屬性數(shù)據(jù),即可實現(xiàn)父組件向子組件通信,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-10-10
  • 前端vue項目debugger調(diào)試操作詳解

    前端vue項目debugger調(diào)試操作詳解

    在vue項目調(diào)試的時候,代碼里面標(biāo)注debugger,這篇文章主要給大家介紹了關(guān)于前端vue項目debugger調(diào)試操作的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • vue實現(xiàn)element上傳多張圖片瀏覽刪除功能

    vue實現(xiàn)element上傳多張圖片瀏覽刪除功能

    這篇文章主要介紹了vue實現(xiàn)element上傳多張圖片瀏覽刪除功能,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • 詳解vue中v-for的key唯一性

    詳解vue中v-for的key唯一性

    在for循環(huán)中生成的元素要加key屬性不僅是在Vue框架中是要添加的,在React框架中也是要添加的。但\其實都不是必須的,因為在 Vue和React中不加key是不會報錯的,只是會有警告。但是我們在深入了解加key的原因后會明白,若想確保沒有隱患的話,元素還是必須要加key屬性。
    2021-05-05
  • vue移動端設(shè)置全屏背景的項目實踐

    vue移動端設(shè)置全屏背景的項目實踐

    本vue移動端項目設(shè)置全屏背景,關(guān)鍵是要找對文件,然后添加background屬性即可,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 如何在Vue3中創(chuàng)建動態(tài)主題切換功能

    如何在Vue3中創(chuàng)建動態(tài)主題切換功能

    在Vue3中實現(xiàn)動態(tài)主題切換功能,通過明亮和暗色主題的選擇,提供個性化使用體驗,使用setup語法糖優(yōu)化代碼,通過創(chuàng)建組件和響應(yīng)式變量來進(jìn)行主題切換,并動態(tài)加載CSS文件
    2024-09-09
  • 前端vue3中的ref與reactive用法及區(qū)別總結(jié)

    前端vue3中的ref與reactive用法及區(qū)別總結(jié)

    這篇文章主要給大家介紹了關(guān)于前端vue3中的ref與reactive用法及區(qū)別的相關(guān)資料,關(guān)于ref及reactive的用法,還是要在開發(fā)中多多使用,遇到響應(yīng)式失效問題,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • vue前端測試開發(fā)watch監(jiān)聽data的數(shù)據(jù)變化

    vue前端測試開發(fā)watch監(jiān)聽data的數(shù)據(jù)變化

    這篇文章主要為大家介紹了vue測試開發(fā)watch監(jiān)聽data的數(shù)據(jù)變化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • vue?點擊按鈕?路由跳轉(zhuǎn)指定頁面的實現(xiàn)方式

    vue?點擊按鈕?路由跳轉(zhuǎn)指定頁面的實現(xiàn)方式

    這篇文章主要介紹了vue?點擊按鈕?路由跳轉(zhuǎn)指定頁面的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評論