這次帶給大家優化vue-router懶加載,的注意事項有哪些,下面就是實戰案例,一起來看一下。
用過vue-router都知道它可以實現模組js的懶加載,即只有當需要時才去加載對應模組的js腳本文件,以加速主頁的顯示。例如只有第一次使用者點擊某個「使用者資訊」按鈕或選單時,才下載「使用者資訊」這個模組的js元件。
懶載入的實現,依賴與webpack下AMD模式require函數的功能。 webpack會將非同步require的文件產生一個獨立的js文件,呼叫時非同步下載這個js且在完成後再執行它。開發專案中實現的關鍵程式碼是:
const basicInfo = { path: '/user', component: resolve => require(['./basicInfo.vue'], resolve) } //然后将这个basicInfo加入路由表中
但這裡有個問題:從使用者點擊「使用者資訊」選單開始,到js檔案下載完畢執行開始,由於從網路下載js有一個時間延遲,這段期間使用者介面是沒有任何回應的,讓使用者感覺點上去無效,常常會重複再次點擊。特別是js檔案大而網路速慢時更明顯。因此,在這個過程中添加一個Loading的載入提示很有必要。
我們分析這行程式碼:
resolve => require(['./basicInfo.vue'], resolve)
它是一個函數,執行了require的過程,完成後再呼叫resolve回呼函數。我們只要封裝一下,在require執行之前顯示Loading,然後在載入完成執行回呼的時候隱藏Loading,也就實現這個需求了。如下:
const basicInfo = { path: '/user', component: resolve => { [显示Loading] require(['./basicInfo.vue'], component => { [隐藏Loading] resolve(component) }) } };
顯示和隱藏Loading的程式碼,可依照自己的UI框架處理就行。例如element-ui:
import { Loading } from 'element-ui'; var unique; export default { show() { let opt = {body: true, text: 'Loading...'}; if(!unique) unique = Loading.service(opt); }, resolve(resolve) { return function (component) { if (unique) { unique.close(); unique = null; } resolve(component) } } } const basicInfo = { path: '/user', component: resolve => { spinRoute.show(); require(['./basicInfo.vue'], spinRoute.resolve(resolve)) } };
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是優化vue-router懶加載的詳細內容。更多資訊請關注PHP中文網其他相關文章!