基於Vue的SPA如何優化頁面加載速度


常見的幾種SPA優化方式

  • 減小入口文件體積

  • 靜態資源本地緩存

  • 開啟GZip壓縮

  • 使用SSR

.....

  1. 減小入口文件體積,常用的手段是路由懶加載,開啟路由懶加載之后,待請求的頁面會單獨打包js文件,使得入口文件index.js變小,開啟懶加載之后,js是這樣請求加載的:

2. 靜態文件本地緩存有兩種方式

而開啟GZip壓縮和使用SSR原理都比較簡單,我們很容易想到這兩種方式是如何提高頁面加載速度的。

但是除了上面幾種方式,另外一種優化方案也不容小覷,這也是我在近期項目開發中使用並理解到的。我們先說說通常項目中是如何加載頁面數據:Vue組件生命周期中請求異步接口,在mounted之前應該都可以,據我了解絕大部分同學是在mounted的時候執行異步請求。但是我們可以把頁面需要的請求放到Vue-Router的守衛中執行,意思是在路由beforeEnter之前就可以請求待加載頁面中所有組件需要的數據,此時待加載頁面的Vue組件還沒開始渲染,而Vue組件開始渲染的時候我們就可以用Vuex里面的數據了。

以上方法的實現思路:

圖意:每個頁面(Page)中都會有很多個Vue組件,可以在Vue組件中添加自定義屬性fetchData,fetchData里面可以執行異步請求(圖中執行Vuex的Action),但是我們怎么獲取到所有組件的fetchData方法並執行呢?如圖所示,在router.beforeResolve守衛中,我們看看router.beforeResolve的定義,所有組件內守衛和異步路由組件被解析之后,解析守衛就被調用,意思是即使頁面中有異步組件,它會等待異步組件解析之后執行,並且解析守衛在beforeEnter之前執行。那我們怎么在解析守衛中獲取到待加載頁面的所有組件呢?通過router.getMatchedComponents方法。

完整實例:

這樣我們就可以在解析守衛中獲取到所有待加載組件的fetchData方法並執行,這樣無疑會在組件開始渲染之后獲取到所有數據,提高頁面加載速度。

很多人可能有個疑問,如果異步請求放在beforeCreate和created不是一樣嗎?答案是否定的,因為這種方式可以將異步請求放到beforeCreate之前!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM