Vue 路由懶載入

来源:https://www.cnblogs.com/chenyuanrumeng/archive/2023/08/12/17624402.html
-Advertisement-
Play Games

隨著 Web 應用的複雜性不斷增加,性能優化成為了開發人員必須面對的挑戰之一。Vue 路由懶載入是一項關鍵技術,它可以幫助我們提高 Web 應用的載入速度,從而提升用戶體驗。 在本篇技術博文中,我們將深入探討 Vue 路由懶載入的背景、原理以及使用方法。我們還將分享一些優化和進階技巧,幫助開發人員... ...


1 路由懶載入的原理

路由懶載入是一種優化技術,用於延遲載入應用程式中的路由組件。它可以提高初始載入速度並減少資源消耗,特別適用於大型單頁應用。

1.1 為什麼要使用路由懶載入

當應用程式包含多個頁面和路由時,如果在初始載入時將所有路由組件都打包到一個文件中,會導致初始載入時間變長,並且用戶可能只訪問其中的一小部分頁面。這樣就造成了資源浪費和性能下降。

使用路由懶載入可以將路由組件按需載入,只有在用戶訪問到對應的路由時才進行載入。這樣可以減少初始載入時間,提升用戶體驗,同時也節省了不必要的資源消耗。

1.2 路由懶載入的工作原理

Vue 路由懶載入的實現依賴於動態導入(Dynamic Import)功能,該功能允許在需要時非同步載入模塊。

在 Vue 中,可以通過以下方式實現路由懶載入:

const Home = () => import('./views/Home.vue')

上述代碼中,import() 函數用於動態導入 Home.vue 組件。當路由被觸發時,該組件才會被非同步載入。

1.3 靜態導入和動態導入的區別

靜態導入是指在編譯時將模塊打包到應用程式中,而動態導入是在運行時根據需要非同步載入模塊。

使用靜態導入時,所有路由組件都會被打包到同一個文件中,這樣可以提高初始載入速度。但如果應用程式較大,可能會導致打包文件過大,影響性能。

使用動態導入時,只有在用戶訪問對應路由時才會載入相應的組件,這樣可以減少初始載入時間和資源消耗。但每次載入組件時都會發送網路請求,稍微增加了延遲。

綜合考慮,通常建議在大型單頁應用中使用路由懶載入來優化性能和用戶體驗。

2 開始使用路由懶載入

2.1 安裝和配置路由懶載入的依賴

要開始使用路由懶載入,首先需要安裝和配置 Vue Router。請確保你已經安裝了 Vue 和 Vue Router。

  1. 使用 npm 或者 yarn 安裝 Vue Router:
npm install vue-router

yarn add vue-router
  1. 在你的 Vue 項目中創建一個名為router.js(或其他自定義名稱)的文件,併在其中引入 Vue 和 Vue Router:
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)
  1. 創建一個 Vue Router 實例並導出它:
export default new VueRouter({
  // 路由配置...
})

2.2 將路由配置為懶載入

要將路由配置為懶載入,你需要進行以下步驟:

  1. 首先,確保你已經安裝了 Vue Router。如果沒有安裝,可以使用以下命令進行安裝:
npm install vue-router
  1. 在你的路由配置文件中,使用動態導入來實現懶載入。你可以使用箭頭函數和 import()、require.ensure 或 dynamic import 等方式進行動態導入。

下麵是一個示例,展示如何使用箭頭函數和 import()來實現懶載入:

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: () => import('@/views/Home.vue')
    },
    {
      path: '/about',
      name: 'About',
      component: () => import('@/views/About.vue')
    }
  ]
})

export default router

在上述代碼中,import('@/views/Home.vue')import('@/views/About.vue') 是通過箭頭函數和 import()方法進行動態導入的。這樣,在用戶訪問對應路由時,相關組件才會被非同步載入,提高性能和用戶體驗。

請註意,@ 符號表示的是你的項目根目錄,具體路徑根據你的項目結構進行調整。

通過以上步驟,你就成功地將路由配置為懶載入了。每當用戶訪問相應的路由時,對應的組件將會被非同步載入,從而減少初始載入時間和資源消耗。

2.3 動態導入組件的方式和代碼示例

在 Vue 中,有多種方式可以實現動態導入組件。下麵我將為你介紹幾種常用的方式和相應的代碼示例。

  1. 使用箭頭函數和 import()

這是最常見的一種方式,使用箭頭函數和import()方法來進行動態導入。

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: () => import('@/views/Home.vue')
    },
    {
      path: '/about',
      name: 'About',
      component: () => import('@/views/About.vue')
    }
  ]
})

在上述代碼中,通過箭頭函數和import()方法實現了對 @/views/Home.vue@/views/About.vue 組件的動態導入。

  1. 使用 require.ensure

另一種常見的方式是使用require.ensure方法。

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: (resolve) => {
        require.ensure(['@/views/Home.vue'], () => {
          resolve(require('@/views/Home.vue'))
        })
      }
    },
    {
      path: '/about',
      name: 'About',
      component: (resolve) => {
        require.ensure(['@/views/About.vue'], () => {
          resolve(require('@/views/About.vue'))
        })
      }
    }
  ]
})

在上述代碼中,使用require.ensure方法來非同步載入組件,並通過回調函數的形式傳遞給component屬性。

  1. 使用 dynamic import

還有一種方式是使用 ES6 的 dynamic import 語法。

const router = new VueRouter({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: () => import('@/views/Home.vue')
    },
    {
      path: '/about',
      name: 'About',
      component: () => import('@/views/About.vue')
    }
  ]
})

在上述代碼中,通過import()方法來實現動態導入組件。

以上就是幾種常用的動態導入組件的方式和相應的代碼示例。你可以根據自己的項目需求選擇其中一種方式來實現路由懶載入。

3 優化和進階

3.1 預載入的概念和使用方式

預載入是一種優化技術,它可以在用戶訪問之前提前載入資源,以減少後續載入時的延遲。在 Vue Router 中,可以使用<router-link>組件的prefetch屬性來實現路由的預載入。

<router-link>組件用於生成導航鏈接,在預設情況下,當滑鼠懸停在鏈接上時,會自動觸發預載入。你也可以通過手動設置prefetch屬性為true或者指定一個回調函數來控制預載入的行為。

以下是一個示例:

<router-link to="/about" prefetch>關於我們</router-link>

這樣,在用戶瀏覽到該頁面之前,與"/about"相關的資源將被提前載入,從而加快後續頁面的載入速度。

3.2 使用路由懶載入時的組件懶載入

在 Vue 中,可以使用路由懶載入來按需載入路由組件,以提高初始載入時間和資源消耗。當用戶訪問某個路由時,相關的組件才會被非同步載入。

要使用路由懶載入,首先需要安裝和配置 Vue Router。然後,在路由配置文件中將組件配置為懶載入。

有多種方式可以實現組件的懶載入,例如使用箭頭函數結合 import()、require.ensure 或 dynamic import 等。下麵是一些示例:

使用箭頭函數和 import():

const Home = () => import('./views/Home.vue');
const About = () => import('./views/About.vue');

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
];

使用 require.ensure:

const routes = [
  {
    path: '/',
    component: resolve => require.ensure([], () => resolve(require('./views/Home.vue')))
  },
  {
    path: '/about',
    component: resolve => require.ensure([], () => resolve(require('./views/About.vue')))
  }
];

使用 dynamic import:

const routes = [
  {
    path: '/',
    component: () => import('./views/Home.vue')
  },
  {
    path: '/about',
    component: () => import('./views/About.vue')
  }
];

以上代碼中,路由對應的組件會在需要時才被非同步載入。這樣可以減少初始載入時間,並且只有當用戶訪問到對應路由時,相關組件才會被載入,提高性能和用戶體驗。

3.3 懶載入的代碼拆分和打包策略

在 Vue 中,使用 Webpack 進行代碼拆分和打包策略是實現懶載入的關鍵。Webpack 提供了多種方式來配置分組懶載入。

一種常用的方式是使用動態導入(dynamic import)語法,在需要時非同步載入模塊。例如,在路由配置文件中可以將組件配置為箭頭函數或使用 import()方法:

const Home = () => import('./views/Home.vue');
const About = () => import('./views/About.vue');

這樣,在用戶訪問對應路由時,相關組件才會被非同步載入。

另一種方式是使用 require.ensure 方法,它也支持按需載入模塊。例如:

const Home = resolve => {
  require.ensure(['./views/Home.vue'], () => {
    resolve(require('./views/Home.vue'));
  });
};

以上兩種方式都能夠實現懶載入,具體選擇哪種方式取決於個人偏好和項目需求。

3.4 Webpack 的分組懶載入配置

接下來,你還可以通過 Webpack 的 SplitChunksPlugin 插件來進一步優化打包策略。該插件可以將公共依賴模塊抽離出來,避免重覆載入,減小打包後的文件大小。

以下是一個示例的 Webpack 配置,展示瞭如何使用 SplitChunksPlugin 插件進行分組懶載入:

module.exports = {
  // ...其他配置

  optimization: {
    splitChunks: {
      cacheGroups: {
        commons: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendors',
          chunks: 'all'
        }
      }
    }
  }
};

上述配置將會把所有來自 node_modules 目錄下的模塊打包到一個名為 vendors 的文件中。

通過合理配置 Webpack,你可以實現更加靈活和高效的懶載入策略,從而提升應用性能和用戶體驗。

4 與其他優化策略的結合

4.1 使用路由懶載入與代碼分割等優化策略的關係

使用路由懶載入和代碼分割是一種常見的優化策略組合,它們可以相互配合以提升應用性能和用戶體驗。

路由懶載入通過將路由組件按需載入,減少了初始載入時間和資源消耗。當用戶訪問某個路由時,才會非同步載入該路由對應的模塊,而不是在應用初始化時一次性載入所有路由組件。這樣可以加快初始載入速度,並且只載入當前需要的模塊,節省了帶寬和記憶體資源。

代碼分割(Code Splitting)是指將應用代碼拆分成多個較小的代碼塊,在需要時再動態載入。通過代碼分割,可以將應用的代碼拆分為多個文件,每個文件包含一個或多個模塊,然後根據需要進行按需載入。這樣做可以減小單個文件的大小,提高頁面響應速度,並且允許並行載入多個代碼塊,進一步提升性能。

使用路由懶載入和代碼分割的組合策略可以使得應用的初始載入時間更短,並且在用戶瀏覽過程中實現按需載入,避免不必要的資源消耗。這對於大型應用或包含大量路由的應用特別有用。

4.2 優化 Vue 路由懶載入的進階技巧

除了基本的路由懶載入方式,還有一些進階技巧可以幫助進一步優化 Vue 的路由懶載入:

  1. 使用 Webpack 的 SplitChunksPlugin 插件進行分組懶載入:通過配置 SplitChunksPlugin 插件,可以將公共依賴模塊抽離出來,並生成單獨的代碼塊。這樣做可以避免重覆載入相同的依賴模塊,減小每個代碼塊的體積,提高緩存效果和載入速度。

  2. 預載入關鍵路由:對於某些核心頁面或用戶經常訪問的頁面,可以使用預載入(Preloading)策略,在初始載入完成後立即開始非同步載入這些頁面的代碼。這樣可以在用戶需要時更快地展示相關內容,提升用戶體驗。

  3. 按需載入子模塊:在路由組件中可能存在多個子模塊,如果所有子模塊都放在一個文件中,會導致該文件過大。為了進一步優化載入性能,可以將子模塊拆分成更小的代碼塊,並根據需要按需載入。

以上是一些優化 Vue 路由懶載入的進階技巧,可以根據具體項目的需求和特點來選擇適合的優化策略。

5 總結

通過本篇技術博文的學習,我們深入瞭解了 Vue 路由懶載入的原理和應用。路由懶載入是提升 Web 應用性能的關鍵技術之一,它能幫助我們在應用中實現按需載入,提高載入速度,優化用戶體驗。

在使用路由懶載入時,我們學會了安裝和配置依賴,將路由配置為懶載入,並使用動態導入組件的方式來延遲載入頁面。我們還探討了預載入、組件懶載入、代碼拆分和打包策略等進階技巧,幫助開發人員進一步提升應用性能。

當然,除了路由懶載入,我們還可以與其他優化策略相結合,如代碼分割等,實現更完善的性能優化。通過靈活應用這些技術,我們可以為用戶提供更快速、流暢的 Web 應用體驗。

如果您是一個開發人員,希望您能在您的項目中嘗試使用 Vue 路由懶載入,從而提升您的應用性能。如果您是一個初學者,希望這篇博文能夠幫助您在 Vue 開發中更好地應用路由懶載入這一重要技術。

感謝您閱讀本篇博文。我們希望您能夠在您的開發實踐中應用所學知識,並取得優秀的結果!請繼續關註更多有關 Vue 和性能優化的技術文章,我們期待為您帶來更多有價值的內容。

祝您在 Vue 開發中取得更大的成功!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • VisualBrush 背景圖 Background上畫,線條(LineGeometry)、幾何圖形(RectangleGeometry)、橢圓(EllipseGeometry)、弧線(ArcSegment )、各種控制項等,相對與DrawingBrush書寫更簡單一些。 屬性 說明 備註 Viewp ...
  • 在.NET開發中,用C#獲取文件信息是比較常見的操作。通過獲取文件信息,我們可以瞭解文件的屬性、大小、創建日期、修改日期等各種元數據信息。比如我們網站需要上傳文件,可以用擴展名稱控制上傳的類型,獲取文件的大小來限制上傳文件等。本文將介紹一系列C#中獲取文件信息的方法,幫助你輕鬆獲取所需信息併進行文件 ...
  • 就在今天,測試提一個BUG,是什麼呢?就是在計算商品採購價時,需要保留2位小數,當時是使用【Math.Round(採購價,2)】這種方法進行四捨五入的,但是這樣寫會有問題,至於什麼問題呢,來看看這篇文章就對了! ...
  • ## 前言 上兩篇文章分享了過濾器實現JWT進行鑒權,分別是通過授權過濾器和操作過濾器實現,這兩個過濾器也是最常用的。文章鏈接:[授權過濾器—MVC中使用授權過濾器實現JWT許可權認證](https://www.cnblogs.com/wml-it/p/17612434.html),[操作過濾器—MV ...
  • ## 前言 上一篇文章分享了授權過濾器實現JWT進行鑒權,文章鏈接:[授權過濾器—MVC中使用授權過濾器實現JWT許可權認證](https://www.cnblogs.com/wml-it/p/17612434.html),接下來將用操作過濾器實現昨天的JWT鑒權。 ## 一、什麼是操作過濾器? ​ ...
  • 本機環境:win10專業版,64位,16G記憶體。 原先用的AS2.2,是很早之前在看《第一行代碼Android(第2版)》的時候,按書里的鏈接下載安裝的,也不用怎麼配置。(PS:第一行代碼這本書對新手確實很適合,第1版是eclise,第2版是Android studio) 最近想給AS升級一下,果不 ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 在切換詳情頁中有這麼一個場景,點擊上一條,會顯示上一條的詳情頁,同理,點擊下一條,會顯示下一條的詳情頁。 偽代碼如下所示: 我們定義了一個 switcher 模版, 用戶點擊上一條、下一條時調用 goToPreOrNext 方法。該頁面通 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...