Vue SPA 首屏優(yōu)化實(shí)戰(zhàn)

前言

常規(guī) vue 項(xiàng)目打包后訪問毙死,返回一個(gè)只包含 div 的 html试溯,其他內(nèi)容塊都是通過 js 動(dòng)態(tài)生成的柜去。

存在兩個(gè)比較大的問題:

  • 不利于 seo
  • 首屏加載慢灰嫉,用戶體驗(yàn)不好

本文是自己根據(jù)項(xiàng)目經(jīng)驗(yàn)總結(jié)的方案,如有不足嗓奢,歡迎指出~

在不斷努力下讼撒,最終優(yōu)化成果:

優(yōu)化

SSR

SSR(Server-Side Rendering) 即服務(wù)端渲染,把 vue 組件在服務(wù)器端渲染為組裝好的 HTML 字符串蔓罚,然后將它們直接發(fā)送到瀏覽器椿肩,最后需要將這些靜態(tài)標(biāo)記混合在客戶端上完全可交互的應(yīng)用程序。

使用 ssr 重新部署構(gòu)建項(xiàng)目后:

可以看到返回的內(nèi)容就已經(jīng)包含了首屏內(nèi)容的 html 代碼塊豺谈,perfect!.

極速傳送門基于vue-cli4.0+Typescript+SSR的小Demo

按需引入

使用 es6 module 進(jìn)行按需引入

1. 路由文件中按需引入組件

# router.index.ts
export function createRouter() {
  return new Router({
    mode: 'history',
    routes: [
      {
        path: '/',
        name: 'Home',
        component: () => import(/* webpackChunkName: "Home" */ './views/Home.vue'),
      },
      {
        path: '/about',
        name: 'About',
        component: () => import(/* webpackChunkName: "about" */ './views/About.vue'),
      },
    ],
  });
}

2. 靜態(tài)庫按需引入模塊郑象,而不是全部

如 element-ui 庫中,我只想用 button 組件 :

import {
  button
} from 'element-ui';

請(qǐng)求優(yōu)化

1. css茬末、js 放置順序

css 文件放 header 中厂榛,js 文件放 body前盖矫,不過 vue 已經(jīng)幫我們處理好了~

2. 使用字體圖標(biāo),icon 資源使用雪碧圖

我們知道 http 建立一次連接需要 3 次握手击奶,太多的請(qǐng)求會(huì)影響加載速度

對(duì)不必要的靜態(tài)資源我們應(yīng)該盡量減少辈双,比如頁面中的 icon 圖標(biāo),如下騰訊官網(wǎng)的一個(gè)圖片:

直接引入一張完成的圖片柜砾,根據(jù) background-position 來設(shè)置圖片的位置

推薦一個(gè)制作雪碧圖的網(wǎng)站: CSS Sprites Generator

CDN 加速

CDN(Content Delivery Network)湃望,即內(nèi)容分發(fā)網(wǎng)絡(luò),構(gòu)建在現(xiàn)有網(wǎng)絡(luò)基礎(chǔ)之上的智能虛擬網(wǎng)絡(luò)痰驱,依靠部署在各地的邊緣服務(wù)器证芭,通過中心平臺(tái)的負(fù)載均衡、內(nèi)容分發(fā)担映、調(diào)度等功能模塊废士,使用戶就近獲取所需內(nèi)容,降低網(wǎng)絡(luò)擁塞蝇完,提高用戶訪問響應(yīng)速度和命中率官硝。

靜態(tài)資源都上傳到 CDN,可以極大地提高訪問速度

不使用 CDN:

使用 CDN:

可以看到使用 CDN后短蜕, 下載度度極大的提高

靜態(tài)資源壓縮氢架、開啟 GZIP 壓縮

對(duì) css、js朋魔、圖片等資源進(jìn)行壓縮达箍,并且服務(wù)器開啟 GZIP 壓縮

可以看到,壓縮過后铺厨,源文件 1.7M 變?yōu)?285kb,體積大大減小

入口 chunk 優(yōu)化

拆分入口 chunk 文件硬纤,分離出一些靜態(tài)的庫解滓,既可以加速打包,也可以優(yōu)化加載筝家。

如下洼裤,分離了一些靜態(tài)庫:vuejs、axios溪王、vuex等腮鞍,可以看到瀏覽器將開啟多個(gè)下載線程進(jìn)行下載。若沒有分離這些靜態(tài)庫莹菱,入口 chunk 將十分巨大移国,加載速度可想而知.

分離一個(gè) element-ui 庫,dev 環(huán)境我們不用管道伟,prod 環(huán)境下我們才分離迹缀,只需要在 vue 打包配置中移除該庫即可:

# vue.config.js
configureWebpack: {
  externals:
    process.env.NODE_ENV === 'production'
      ? {
        'element-ui': 'element-ui',
      }
      : undefined,
},

# index.html 手動(dòng)引入靜態(tài)資源
<script src="/js/element-ui/element-ui.2.11.1.js"></script>

我的博客


END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末使碾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子祝懂,更是在濱河造成了極大的恐慌票摇,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砚蓬,死亡現(xiàn)場(chǎng)離奇詭異矢门,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灰蛙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門祟剔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缕允,你說我怎么就攤上這事峡扩。” “怎么了障本?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵教届,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我驾霜,道長(zhǎng)案训,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任粪糙,我火速辦了婚禮强霎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓉冈。我一直安慰自己城舞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布寞酿。 她就那樣靜靜地躺著家夺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伐弹。 梳的紋絲不亂的頭發(fā)上拉馋,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音惨好,去河邊找鬼煌茴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛日川,可吹牛的內(nèi)容都是我干的蔓腐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼逗鸣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼合住!你這毒婦竟也來了绰精?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤透葛,失蹤者是張志新(化名)和其女友劉穎笨使,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僚害,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硫椰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萨蚕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靶草。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖岳遥,靈堂內(nèi)的尸體忽然破棺而出奕翔,到底是詐尸還是另有隱情,我是刑警寧澤浩蓉,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布派继,位于F島的核電站,受9級(jí)特大地震影響捻艳,放射性物質(zhì)發(fā)生泄漏驾窟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一认轨、第九天 我趴在偏房一處隱蔽的房頂上張望绅络。 院中可真熱鬧,春花似錦嘁字、人聲如沸恩急。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽假栓。三九已至,卻和暖如春霍掺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拌蜘。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工杆烁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人简卧。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓兔魂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親举娩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子析校,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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