vue單頁應用首次加載太慢之性能優化


問題描述:

最近開發了一個單頁應用,上線后發現頁面初始加載要20s才能完成,這就很影響用戶體驗了,於是分析原因,發現頁面加載時有個

vendor.js達到了3000多kb,於是在網上查找了一下原因,是因為我打包的時候把所有第三方依賴都打包放進去了;要怎么分離出去呢,

看下面步驟:

 

一、解決打包后vendor.js 很大,導致上線后頁面首次加載速度異常慢:

vue-cli npm run build命令默認把dependencies中的依賴統一打包,導致vendor.js文件過大,出現首屏加載過於緩慢的問題。

解決方案:使用externals引用第三方資源,防止element資源被打包到自己項目中,(總共修改3個部分index.html、webpack.base.conf.js、main.js)

 

1、修改index.html頁面,在head中引入cdn上的資源。

<!-- 正常的引入 cdn 資源即可 -->

<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
<script src="https://cdn.bootcss.com/element-ui/2.4.0/index.js"></script>
<script src="https://cdn.bootcss.com/echarts/3.7.0/echarts.min.js"></script>

 

注意:上面是直接重cdn上引入的,如果某個時候cdn服務器出現問題,我們的項目就癱瘓了,所以為了安全起見要給自己留一手喔,

用下面的方法,當上面的文件引入失敗后,就從備用的地址引入;當然備用的地址你也可以換成本地的,我這里是放的另一個cdn服務器上的,

應該不會兩個服務器同時出現故障吧!...

<!-- 引入 cdn 資源 -->
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
<script>   //<![CDATA[   if (typeof Vue == 'undefined') {     document.write(unescape("%3Cscript src='https://cdn.staticfile.org/vue/2.6.10/vue.min.js' %3E%3C/script%3E"));   } //]]> </script> <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script> <script>   //<![CDATA[   if (typeof VueRouter == 'undefined') {     document.write(unescape("%3Cscript src='https://cdn.staticfile.org/vue-router/3.0.7/vue-router.min.js' %3E%3C/script%3E"));   } //]]> </script> <script src="https://cdn.bootcss.com/element-ui/2.4.0/index.js"></script> <script>   //<![CDATA[   if (typeof ELEMENT == 'undefined') {     document.write(unescape("%3Cscript src='https://cdn.staticfile.org/element-ui/2.10.1/index.js' %3E%3C/script%3E"));   } //]]> </script> <script src="https://cdn.bootcss.com/echarts/3.7.0/echarts.min.js"></script> <script>   //<![CDATA[   if (typeof echarts == 'undefined') {     document.write(unescape("%3Cscript src='https://cdn.staticfile.org/echarts/4.2.1-rc1/echarts-en.min.js' %3E%3C/script%3E"));   } //]]> </script>

 

 

2、修改webpack.base.conf.js文件.添加externals配置

externals: {

  'vue': 'Vue',   'vue-router': 'VueRouter',   'element-ui': 'ELEMENT',   "echarts": "echarts", },

 

3. 刪除main.js中的相應import from。因為如果不刪除,打包的時候還會把這兩個文件打進去。

 

最后去打包,發現vendor.js只有300kb了。上線后發現頁面首次加載飛快了。

 

下面再補充一些其它優化:

1、路由懶加載肯定是要做的:

當打包構建應用時,Javascript 包會變得非常大,影響頁面加載。如果我們能把不同路由對應的組件分割成不同的代碼塊,

然后當路由被訪問的時候才加載對應組件,這樣就更加高效了。結合 Vue 的異步組件和 Webpack 的代碼分割功能

輕松實現路由組件的懶加載。具體實現方法官網和網上有很多例子,這里就不詳細講解了。

 

 

3、本地圖片與請求的后台圖片的大小:

在我這個項目中有很多圖片,最開始沒太在意圖片的大小,導致上線后很多大的圖片加載很慢,於是我把圖片做了壓縮處理;推薦個網站:

http://www.bejson.com/ui/compress_img/(壓縮圖片不失幀);

當然我們也可以使用webpack里的插件對打包的圖片進行壓縮,也可以使用gulp.js里的插件對圖片進行壓縮。具體自己去百度吧...

 

4、打包后app.css過大:

我們可以把app.css做拆分,可以利用 webpack 中的 dll 做一部分的分割,比如第三方等的公用 css 文件。

然后再者可以利用 mini-css-extract-plugin 這個插件做各自模塊的 css 文件提取(如果用的是webpack4),

webpack3 的化可以用 extract-text-webpack-plugin。


免責聲明!

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



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