VUE 項目如何快速優化?| 原力計劃

2022-01-17 CSDN

前言

相信現在很多人都是用Vue做過了各種項目,但是項目代碼做完和上線並不代表這結束,還有上線以後的優化也是很重要的一點,這次的博客就來給大家說一下如何優化一下Vue的項目,讓你的項目打包和運行速度更上一個臺階。

優化策略

生成打包報告

修改webpack默認配置

加載外部CDN資源

路由懶加載

開啟gizp配置

生成打包報告

生成Vue的打包報告目的在於讓我們先大概的了解到當前項目生成的各個文件的大小,讓我們心裡有數,知道哪裡需要優化。

通過命令行參數形式生成報告:

//通過 vue-cli的命令選項可以生成打包報告
// --report 選項可以生成 report.html 用以分析包內容
vue-cli-service build --report

通過可視化面板直接查看報告:

可以在UI面板中,通過控制臺和分析面板,可以方便的查看項目中所存在的問題。

上邊圖片中標註的就是我們需要注意的,依賴項很多,導致打的包最終體積非常的大,相信這項目如果上線那麼前端會先請求這個無比巨大的js文件,估計甲方爸爸會錘死前端人員。

通過 vue.config.js修改webpack的默認配置


通過vue-cli 3,0 工具生成的項目,默認隱藏了所有的 webpack配置項,目的是為了屏幕項目的配置過程,讓程式設計師的工作重心放到具體的功能和邏輯的實現上。

如果程式設計師有修改 webpack默認配置的需求,可以在項目根目錄中 按需創建vue.config.js這個配置文件,從而對項目的打包發布過程做自定義配置,具體可以參考 https://cli.vuejs.org/zh/config/#vue-config-js

為開發模式和發布模式指定不同的打包入口:

默認情況下,Vue項目的開發模式和發布模式公用一個入口文件(src/main.js),為了將項目的開發過程與發布過程分離,我們可以設置兩種模式,各自指定打包入口文件。

開發模式入口文件:src/main-dev.js

發布模式入口文件:src/main-prod.js

通過chainWebpack自定義打包入口:

module.exports = {
  lintOnSave: false,
  chainWebpack:config=>{
    //生產環境
    config.when(process.env.NODE_ENV === 'production',config=>{
    //注意main-prod.js是已經存在的文件
      config.entry('app').clear().add('./src/main-prod.js')
    })
    //開發環境
    config.when(process.env.NODE_ENV === 'development',config=>{
    //注意main-dev.js是已經存在的文件
      config.entry('app').clear().add('./src/main-dev.js')
    })
  }
}

因為開發生產環境不同,所以在main.js文件中內容就可能不同,為了解決耦合,我們就把main.js 重新劃分成了兩個文件 分別是main-dev.js 和 main-prod.js

通過externals加載外部CDN資源:

默認情況下,通過import語法導入的第三方依賴包,最終會打包合併到同一個文件中,從而導致打包成功後,單文件體積過大的問題。

vue.config.js的配置externals節點:

module.exports = {
  lintOnSave: false,
  chainWebpack:config=>{
    //生產環境
    config.when(process.env.NODE_ENV === 'production',config=>{
      config.entry('app').clear().add('./src/main-prod.js')
      config.set('externals',{
        vue:'Vue',
        'vue-router':'VueRouter',
        axios:'axios',
        lodash:'_',
        echarts:'echarts',
        nprogress:'NProgress',
        'vue-quill-editor':'VueQuillEditor'
      })
    })
    //開發環境
    config.when(process.env.NODE_ENV === 'development',config=>{
      config.entry('app').clear().add('./src/main-dev.js')
    })
  }
}

通過設置externals這個節點,指定哪些包直接去window上去查找使用,而不會將這些指定的包再次打包起來,這樣就可以減小最終生成的js的文件體積。

去除main.js中引入的第三方包的樣式表:

將這些樣式表也統統的從main.js文件中去除,統一由CDN進行引入。

在public/index.html中添加 css和js的CDN地址:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
        <!-- nprogress 的樣式表文件 -->
        <link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" />
        <!-- 富文本編輯器 的樣式表文件 -->
        <link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css" />
        <link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css" />
        <link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css" />
        <script src="https://cdn.staticfile.org/vue/2.6.11/vue.min.js"></script>
        <script src="https://cdn.staticfile.org/vue-router/3.1.6/vue-router.min.js"></script>
        <script src="https://cdn.staticfile.org/axios/0.19.2/axios.min.js"></script>
        <script src="https://cdn.staticfile.org/lodash.js/4.17.15/lodash.min.js"></script>
        <script src="https://cdn.staticfile.org/echarts/4.7.0/echarts.min.js"></script>
        <script src="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script>
        <!-- 富文本編輯器的 js 文件 -->
        <script src="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script>
        <script src="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.6/dist/vue-quill-editor.js"></script>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

我們通過CDN去引用css樣式的話,我們項目生成的包中就不會存在這些css文件,可以減小項目的體積,並且,我們還將 指定的js文件也通過CDN的方式來引用,這樣這些js就會註冊到windows全局中,這樣就對應到了vue.config.js配置externals節點的內容了。

引入CDN效果對比:

未使用CDN:

使用CDN後:

甲方爸爸打人的力度輕了許多。

路由懶加載

當項目打包構建的時候,js包會變得非常巨大,影響頁面加載,如果我們能夠把不同路由對應的組件分割成不同的代碼塊,然後當路由被訪問的時候才加載對應的組件,這樣就更加高效了。

安裝@bable/plugin-syntax-dynamic-import包

在babel.config.js配置文件中聲明該插件

將路由改為按需加載的形式:

const Login = () => import(/* webpackChunkName: "login_home_welcome" */ '../components/Login.vue')
const Home = () => import(/* webpackChunkName: "login_home_welcome" */ '../components/Home.vue')
const Welcome = () => import(/* webpackChunkName: "login_home_welcome" */ '../components/Welcome.vue')

其中webpackChunkName 指定了 打包的文件名字,讓 Login.vue 、Home.vue 、 Welcome.vue 統一打到 指定的包中。

開啟gizp配置:

這一項應該由後端小哥來做,使用gizp可以減少文件體積,使得傳輸速度更快,我們就拿Express來展示一下如何去做。

//安裝相應的包
npm install compression -D 
//導入包
const compression = require('compression')
//啟用中間件
app.use(compression())

這樣我們請求包的體積就會變得更小,有助於提升我們項目運行的速度。

最終效果展示

最終在我們經過上述一系列的操作以後,我們最終生產環境打出來的包體積只有356.2KB,這樣我們項目在上線以後,就可以減輕首頁假死的問題,同時因為請求的文件小了很多,所以運行速度也會加快,大家趕快去優化一下自己的項目吧。

版權聲明:本文為CSDN博主「靖凡無所畏懼」的原創文章,遵循CC 4.0 BY-SA版權協議。原文:https://blog.csdn.net/wjf1997/article/details/106248699

更多精彩推薦

☞中國第一代程式設計師潘愛民的 30 年程序人生

☞雲上容器 ATT&CK 矩陣詳解,阿里雲助力企業容器化安全落地

☞秋名山老司機從上車到翻車的悲痛經歷,帶你深刻了解什麼是 Spark on Hive!| 原力計劃

☞Python 還能實現哪些 AI 遊戲?附上代碼一起來一把!

☞數據科學產業中哪些架構最熱門?本文為你盤點了 5 款!

☞行業大神支招!5 個方法讓你的數字資產免受黑客禍害!

相關焦點

  • 20 道必看的 Vue 面試題 | 原力計劃
    當項目龐大的時候使用它:5. Vuex 有哪幾種屬性?6. 如何讓 CSS 旨在當前組件中起作用?當前組件的 < style>標籤修改為< style scoped>7. 請列舉出3個 Vue 中常見的生命周期鉤子函數。
  • 20 道必看的 Vue 面試題|原力計劃
    作者 | 紅顏禍水nvn責編 | 唐小引出品 | CSDN 原力計劃1. 什麼是 MVVM?MVVM 是 Model-View-ViewModel 的縮寫,MVVM 是一種設計思想。當項目龐大的時候使用它:需要動態的註冊響應式數據;需要命名空間 namespace 來管理組織我們的數據;希望通過插件,來更改記錄;方便測試;以上這些需要和希望,都是我們 vuex 需要做的一些事情
  • 用這 6 個技巧快速優化我們的 Vue 代碼
    今天其實就是說下我自己在vue項目中進行的一些總結或者是經驗,如果有錯誤的地方也是歡迎大家指正。1.兼容IE11用過vue的同學們應該都比較清楚,vue其實是可以兼容ie9的,但是這種兼容並不是說,你寫了一個項目,打開ie9就能兼容了,是需要用工具將代碼進行轉換的。
  • SPA單頁面應用優化VUE性能優化
    Spa單頁面應用比如vue、react、angular都是屬於單頁面應用,那麼如何優化呢?咱們拿vue舉例。來做優化,webpack能做哪些優化呢?那麼require.ensure如何在vue中使用呢?require.ensure主要是在vue的路由中使用,如果不使用代碼分割隨著頁面的增多build之後app.727c5a981063de8a5ac8.js會越來越大。使用之後會將這個js文件按頁面數量分割從而做到頁面按需加載js。
  • 如何用 Vue + Vuetify 快速建站?
    │   └── views│       ├── About.vue│       ├── Blog.vue│       ├── Contact.vue│       ├── Resume.vue│       ├── Skills.vue│       ├── layout│
  • 一張圖教你快速玩轉vue-cli3
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言本文系統的梳理了vue-cli3搭建項目的常見用法,目的在於讓你快速掌握獨立搭建vue項目的能力。
  • 如何Linux部署下Vue項目環境
    要將Vuei .js集成到一個項目中,您可以使用CDN包、NPM或CLI。如果你想開始學習Vue。js,那麼最好使用CDN包。您可以簡單地在項目中添加以下腳本標記來開始。<script src="https://unpkg.com/vue@next"></script></td>但是,不建議將此方法用於生產目的,因為它可能會導致將來的兼容性問題。
  • Vue的安裝及使用快速入門
    vue是一個JavaMVVM庫,是一套用於構建用戶界面的漸進式框架,是初創項目的首選前端框架。它是以數據驅動和組件化的思想構建的,採用自底向上增量開發的設計。它是輕量級的,它有很多獨立的功能或庫,我們會根據我們的項目來選用vue的一些功能。它提供了更加簡潔、更易於理解的API,使得我們能夠快速地上手並使用Vue.js。
  • Vuex你從沒使用過的優化方案!
    本文轉載自【微信公眾號:前端人,ID:FrontendPeople】經微信公眾號授權轉載,如需轉載與原文作者聯繫在本篇文章我們將重點關注代碼拆分我們的狀態管理 - Vuex模塊的優化>在我們進一步了解如何懶加載Vuex模塊之前,您需要注意一件重要的事情。
  • 「Vue實戰」武裝你的前端項目
    ) const fileName = validateFileName(filePath) const componentName = fileName.toLowerCase() === 'index' ?
  • 如何在vue項目中使用sass並設置元素樣式
    elementJavaScriptsassCSS3 在創建vue框架項目時,可以使用CSS3定義元素樣式;還可以使用sass動態變量定義元素樣式如果直接使用sass,啟動項目會出現報錯。那麼,如何在vue項目中使用sass?
  • 總結我對Vue項目上線做的一些基本優化
    其次就是和UI配套的方法庫,也是我近期的一個項目,是一個Typescript生產的小東西。希望能夠對於大家有一些幫助。eleganceUI框架:Github倉庫這篇文章呢,主要是做一個Vue性能優化的帖子,做一個參考文檔,對以後項目上線做一些集合文檔。如果對各位在項目優化時,做一個文檔參照。
  • 把 Vue-cli 項目遷移至 Vite!
    [譯] 原文地址:https://medium.com/nerd-for-tech/from-vue-cli-to-vitejs-648d2f5e031d背景我最近將一些 Vue2 項目從vue-cli/webpack遷移到了 vite。
  • 只需3分鐘,就能創建 一個SpreadJS的Vue項目
    VUE CLI,只需3分鐘快速構建一個SpreadJS Vue工程。   概述   SpreadJS純前端表格控制項 V11.2(SP2)版本已經全面支持了Vue拓展,下面我們看下如何配合VUE CLI,只需3分鐘快速構建一個SpreadJS Vue工程。
  • Vue項目實戰(八)渲染一個列表
    vue渲染一個列表,公眾號已經準備了vue實戰教程,如果您有需要,可以在公眾號回復「vue」獲取。在第三篇博文中,我們規劃了我們的項目文件結構,當時保留了一個 components 的空文件夾。這裡,就是準備放我們的自定義組件的。首先,我們去創建兩個空文本文件,分別是 header.vue 文件和 footer.vue 文件。
  • 面試官:說說如何在Vue項目中應用TypeScript?
    一、前言與如何在React項目中應用TypeScript類似在VUE項目中應用typescript,我們需要引入一個庫vue-property-decorator,其是基於vue-class-component庫而來,
  • 花五分鐘重新認知 Vue 項目 src 目錄
    Vue 項目的目錄不就是 Vue CLI 嗎?讓本瓜帶你來康康作者是否還能變出什麼花來?本文取其要,通譯之。Vue CLI認知一個項目從認識目錄開始!Vue 項目那逃不過認知最通用的 Vue CLI 目錄結構。
  • 如何在vue項目中使用muse-ui並創建一個form表單提交
    Muse UI是基於vue的開源組件庫,包含了不同的控制項;可以自定義主題,實現定製化。如果在vue項目中,如何使用muse-ui?cnpm install --global vue-cli3、使用vue init命令初始化項目,創建基於webpack模板的項目vue init
  • 快速掌握 Vue3 全家桶開發
    /Test.vue';Vue.component('Test', Test);// Vue3 使用 createApp().component 方式import { createApp, h } from 'vue';import Test from '.
  • 揭秘 Vue.js 九個性能優化技巧
    我看完他的分享 PPT後,也閱讀了相關的項目源碼,在深入了解它的優化原理後,把其中一些優化技巧也應用到了我平時的工作中,取得了相當不錯的效果。這個分享可謂是非常實用了,但是知道和關注的人似乎並不多,到目前為止,該項目也只有可憐的幾百個 star。