最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解vue-cli 3.0 build包太大導致首屏過長的解決方案

 更新時間:2018年11月10日 14:39:30   作者:內(nèi)孤  
這篇文章主要介紹了詳解vue-cli 3.0 build包太大導致首屏過長的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言:最近用vue-cli 3.0 構(gòu)建一個小型的工單管理系統(tǒng),完工后build發(fā)現(xiàn)一個chunk-vendors包就達到985kb,加上其他一些資源文件,首頁的下載總共大小快要2M。測試給的第一個反饋就是首屏慢慢慢慢慢!

根據(jù)首屏加載資源文件過大,進行一下優(yōu)化:

1. 路由懶加載

結(jié)合Vue的異步組件再結(jié)合webpack的代碼分割,我們可以輕松的實現(xiàn)路由懶加載。

vue-cli 3.0 模式就使用了Babel,我們需要添加 syntax-dynamic-import 插件,才能使 Babel 可以正確地解析語法。

// 安裝插件 syntax-dynamic-import
cnpm install --save-dev @babel/plugin-syntax-dynamic-import

// 修改babel.config.js
module.exports = {
 "presets": [
  "@vue/app"
 ],
 "plugins": [
  [
   "component",
   {
    "libraryName": "element-ui",
    "styleLibraryName": "theme-chalk"
   },
   "syntax-dynamic-import"
  ]
 ]
}

// 修改路由組件的加載(router/index.js)
{
 path: '/',
 name: 'home',
 component: resolve => require(['pages/Home'], resolve)
}

使用了路由懶加載,已經(jīng)把原來的chunk-vendors降到了789kb,但加載789kb還是太大。那繼續(xù)優(yōu)化

2. 服務(wù)器開啟Gzip

Gzip是GNU zip的縮寫,顧名思義是一種壓縮技術(shù)。它將瀏覽器請求的文件先在服務(wù)器端進行壓縮,然后傳遞給瀏覽器,瀏覽器解壓之后再進行頁面的解析工作。在服務(wù)端開啟Gzip支持后,我們前端需要提供資源壓縮包。

通過CompressionWebpackPlugin插件build提供壓縮

// 安裝插件
cnpm i --save-dev compression-webpack-plugin

// 在vue-config.js 中加入
const CompressionWebpackPlugin = require('compression-webpack-plugin');
const productionGzipExtensions = ['js', 'css'];
const isProduction = process.env.NODE_ENV === 'production';

.....
module.exports = {
....
 configureWebpack: config => {
  if (isProduction) {
   config.plugins.push(new CompressionWebpackPlugin({
    algorithm: 'gzip',
    test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
    threshold: 10240,
    minRatio: 0.8
   }))
  }
 }
}

現(xiàn)在我們看一下build后的壓縮包的大小,大概減少了三分之二


3. 啟用CDN加速

用Gzip已把文件的大小減少了三分之二了,加載速度從之前2.7秒多到現(xiàn)在的1.8秒多,但這個還是得不到滿足。那我們就把那些不太可能改動的代碼或者庫分離出來,繼續(xù)減小單個chunk-vendors,然后通過CDN加載進行加速加載資源。

// 修改vue.config.js 分離不常用代碼庫
module.exports = {
 configureWebpack: config => {
  if (isProduction) {
   config.externals = {
    'vue': 'Vue',
    'vue-router': 'VueRouter',
    'moment': 'moment'
   }
  }
 }
}
// 在public文件夾的index.html 加載

<!-- CND -->
<script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.runtime.min.js"></script>
<script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

現(xiàn)在再build后看下大小和訪問速度:

CDN優(yōu)化后.jpg

可以看到chunk-verdors 又減少了114kb,通過CDN加載整個文檔速度已經(jīng)接近1秒。

4. 修改uglifyOptions去除console來減少文件大小

// 安裝uglifyjs-webpack-plugin
cnpm install uglifyjs-webpack-plugin --save-dev

// 修改vue.config.js
 configureWebpack: config => {
  if (isProduction) {
   .....
   config.plugins.push(
    new UglifyJsPlugin({
     uglifyOptions: {
      compress: {
       warnings: false,
       drop_debugger: true,
       drop_console: true,
      },
     },
     sourceMap: false,
     parallel: true,
    })    
   )
  }
 }

如果代碼中打了很log,這個優(yōu)化還是有點效果的。

總結(jié)

首屏優(yōu)化工作告一段落,通過以上四項的優(yōu)化,已經(jīng)很大的提升了首屏的加載速度。如果想再進一步優(yōu)化還是空間的,例如從代碼層面去減少代碼量(代碼復用率)。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解如何在vue項目中設(shè)置首頁

    詳解如何在vue項目中設(shè)置首頁

    這篇文章主要給大家介紹如何在vue項目中設(shè)置首頁,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • vue組件(全局,局部,動態(tài)加載組件)

    vue組件(全局,局部,動態(tài)加載組件)

    組件是Vue.js最強大的功能之一。組件可以擴展HTML元素,封裝可重用的代碼。這篇文章主要介紹了vue組件(全局,局部,動態(tài)加載組件),需要的朋友可以參考下
    2018-09-09
  • elementui中的el-cascader級聯(lián)選擇器的實踐

    elementui中的el-cascader級聯(lián)選擇器的實踐

    本文主要介紹了elementui中的el-cascader級聯(lián)選擇器的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Vue組件之間數(shù)據(jù)共享淺析

    Vue組件之間數(shù)據(jù)共享淺析

    本文章向大家介紹vue組件中的數(shù)據(jù)共享,主要包括vue組件中的數(shù)據(jù)共享使用實例、應(yīng)用技巧、基本知識點總結(jié)和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下
    2022-11-11
  • 如何在vite里獲取env環(huán)境變量淺析

    如何在vite里獲取env環(huán)境變量淺析

    開發(fā)中經(jīng)常會使用環(huán)境變量,Vite相比于Webpack也有一定的變化,下面這篇文章主要給大家介紹了關(guān)于如何在vite里獲取env環(huán)境變量的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • vue讀取本地的excel文件并顯示在網(wǎng)頁上方法示例

    vue讀取本地的excel文件并顯示在網(wǎng)頁上方法示例

    這篇文章主要介紹了vue讀取本地的excel文件并顯示在網(wǎng)頁上方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • vue 虛擬dom的patch源碼分析

    vue 虛擬dom的patch源碼分析

    這篇文章主要介紹了vue 虛擬dom的patch源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • vue3?setup中父組件通過Ref調(diào)用子組件的方法(實例代碼)

    vue3?setup中父組件通過Ref調(diào)用子組件的方法(實例代碼)

    這篇文章主要介紹了vue3?setup中父組件通過Ref調(diào)用子組件的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 在vue上使用cesium開發(fā)三維地圖的詳細過程

    在vue上使用cesium開發(fā)三維地圖的詳細過程

    這篇文章主要給大家介紹了關(guān)于在vue上使用cesium開發(fā)三維地圖的詳細過程,Cesium是一個強大的JavaScript庫,支持三維地理信息展示,并提供了豐富的地理空間數(shù)據(jù)可視化功能,需要的朋友可以參考下
    2023-12-12
  • vue3.0關(guān)閉eslint校驗的3種方法詳解

    vue3.0關(guān)閉eslint校驗的3種方法詳解

    這篇文章主要給大家介紹了關(guān)于vue3.0關(guān)閉eslint校驗的3種方法,在實際開發(fā)過程中,eslint的作用不可估量,文中將關(guān)閉的方法介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論

和林格尔县| 阳高县| 武鸣县| 遂川县| 土默特右旗| 三穗县| 绿春县| 天台县| 六枝特区| 玉山县| 汾阳市| 桑植县| 宾川县| 新余市| 梓潼县| 锡林郭勒盟| 靖西县| 霍城县| 黄骅市| 五常市| 新郑市| 景德镇市| 抚州市| 浮梁县| 将乐县| 铁力市| 武平县| 桐庐县| 鹰潭市| 庆阳市| 鄂温| 宁陵县| 田林县| 富蕴县| 卓尼县| 渭南市| 桂阳县| 新竹市| 旺苍县| 东乌珠穆沁旗| 通海县|