vue 首屏頁面性能優(yōu)化

1、vue 開啟文件大小分析

1.1 安裝

npm install webpack-bundle-analyzer --save-dev

1.2 vue.config.js 配置

module.exports = {
  chainWebpack: config => {
    config
      .plugin('webpack-bundle-analyzer')
      .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin);
  },
};

1.3 運(yùn)行命令

npm run serve

訪問 http://localhost:8888

2爆班、vue-router 使用懶加載

{
    path: '/Login',
    name: 'Login',
    component: () = >import( /* webpackChunkName: "Login" */  '@/view/Login')
}

同一個(gè) vue 文件 webpackChunkName 保持一致

3杂伟、對(duì)于第三方 js 庫分離打包

  • 生產(chǎn)環(huán)境是內(nèi)網(wǎng)的話剃毒,就把資源放內(nèi)網(wǎng)斩芭,通過靜態(tài)文件引入典勇,會(huì)比 node_modules 和外網(wǎng) CDN 的打包加載快很多桅锄。
  • 如果是外網(wǎng)的話琉雳,可以通過 CDN 方式引入,因?yàn)椴挥谜加迷L問外網(wǎng)的帶寬友瘤,不僅可以節(jié)省流量翠肘,還能通過 CDN 加速,獲得更快的訪問速度辫秧。但是要注意下束倍,如果你引用的 CDN 資源存在于第三方服務(wù)器,在安全性上并不完全可控盟戏。

目前采用引入依賴包生產(chǎn)環(huán)境的 js 文件方式加載绪妹,直接通過 window 可以訪問暴露出的全局變量,不必通過 import 引入柿究,Vue.use 去注冊(cè)

3.1 配置 externals

在 vue.config.js 中配置 externals

// cdn 服務(wù)
const cdn = {
  externals: {
    vue: 'Vue',
    vuex: 'Vuex',
    'vue-router': 'VueRouter',
    axios: 'axios',
    'element-ui': 'ELEMENT',
  },
};
module.exports = {
    configureWebpack: {
        externals: externals: process.env.VUE_APP_ENV !== 'development' ? cdn.externals : {}, // 非開發(fā)環(huán)境
        // 未配置 VUE_APP_ENV 值可能是 process.env.NODE_ENV
    }
}

3.2 使用 CDN 加載資源

/public/index.html

<!DOCTYPE html>
<html lang="">
  <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,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"
    />
    <link
      rel="resource"
      type="application/l10n"
      href="<%= BASE_URL %>viewer.properties"
    />
    <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
    <title><%= htmlWebpackPlugin.options.title %></title>

    <% if (process.env.VUE_APP_ENV !== 'development' ) { %>
    <link
      rel="stylesheet"
      
    />
    <% } %>
  </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>
    <!-- 引入組件庫 -->
    <% if (process.env.VUE_APP_ENV !== 'development' ) { %>
    <!-- vue -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
    <!--vue-router -->
    <script src="https://unpkg.com/vue-router@3"></script>
    <!--vuex -->
    <script src="https://unpkg.com/vuex@3"></script>
    <!-- elementUI -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <!-- axios -->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <% } %>
  </body>
</html>

4邮旷、移除 console.log

4.1 安裝依賴

npm install babel-plugin-transform-remove-console --save-dev

4.2 配置 babel.config.js

const prodPlugins =
  process.env.VUE_APP_ENV === 'production' ? ['transform-remove-console'] : [];
module.exports = {
  plugins: [...prodPlugins],
  presets: ['@vue/cli-plugin-babel/preset'],
};

5、開啟 gzip

5.1 vue 開啟 gzip

(1)安裝依賴

npm i compression-webpack-plugin@5.0.1 --save-dev

(2)在 vue.config.js 配置

// gzip包
const CompressionWebpackPlugin = require('compression-webpack-plugin');
//匹配此 {RegExp} 的資源
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i;
module.exports = {
  configureWebpack: {
    // 開啟gzip
    plugins: [
      new CompressionWebpackPlugin({
        filename: '[path].gz[query]',
        algorithm: 'gzip',
        test: new RegExp(productionGzipExtensions),
        threshold: 10240,
        minRatio: 0.8,
      }),
    ],
  },
};

5.2 nginx 開啟 gzip

gzip on;
gzip_min_length 1k;
gzip_comp_level 5;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";   
gzip_buffers 32 4k;
gzip_http_version 1.0;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝇摸,一起剝皮案震驚了整個(gè)濱河市婶肩,隨后出現(xiàn)的幾起案子办陷,更是在濱河造成了極大的恐慌,老刑警劉巖律歼,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件民镜,死亡現(xiàn)場離奇詭異,居然都是意外死亡苗膝,警方通過查閱死者的電腦和手機(jī)殃恒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辱揭,“玉大人,你說我怎么就攤上這事病附∥是裕” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵完沪,是天一觀的道長域庇。 經(jīng)常有香客問我,道長覆积,這世上最難降的妖魔是什么听皿? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮宽档,結(jié)果婚禮上尉姨,老公的妹妹穿的比我還像新娘。我一直安慰自己吗冤,他們只是感情好又厉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著椎瘟,像睡著了一般覆致。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肺蔚,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天煌妈,我揣著相機(jī)與錄音,去河邊找鬼宣羊。 笑死璧诵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的段只。 我是一名探鬼主播腮猖,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼赞枕!你這毒婦竟也來了澈缺?” 一聲冷哼從身側(cè)響起坪创,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姐赡,沒想到半個(gè)月后莱预,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡项滑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年依沮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枪狂。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡危喉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出州疾,到底是詐尸還是另有隱情辜限,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布严蓖,位于F島的核電站薄嫡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏颗胡。R本人自食惡果不足惜毫深,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望毒姨。 院中可真熱鬧哑蔫,春花似錦、人聲如沸手素。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泉懦。三九已至稿黍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間崩哩,已是汗流浹背巡球。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邓嘹,地道東北人酣栈。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像汹押,于是被迫代替她去往敵國和親矿筝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容