webpack優(yōu)化之preload和prefetch

prefetch

<link rel="prefetch" ></link>

這段代碼告訴瀏覽器审姓,這段資源將會(huì)在未來某個(gè)導(dǎo)航或者功能要用到园担,但是本資源的下載順序權(quán)重比較低。也就是說prefetch通常用于加速下一次導(dǎo)航缅糟,而不是本次的挺智。

被標(biāo)記為prefetch的資源,將會(huì)被瀏覽器在空閑時(shí)間加載窗宦。

preload

<link rel="preload" ></link>

preload通常用于本頁(yè)面要用到的關(guān)鍵資源赦颇,包括關(guān)鍵js、字體赴涵、css文件媒怯。preload將會(huì)把資源得下載順序權(quán)重提高,使得關(guān)鍵數(shù)據(jù)提前下載好髓窜,優(yōu)化頁(yè)面打開速度扇苞。

webpack 搭配prefetch優(yōu)化單頁(yè)面應(yīng)用code-splitting

單頁(yè)面應(yīng)用由于頁(yè)面過多欺殿,可能會(huì)導(dǎo)致代碼體積過大,從而使得首頁(yè)打開速度過慢鳖敷。所以切分代碼脖苏,優(yōu)化首屏打開速度尤為重要。

但是所有的技術(shù)手段都不是完美的定踱。當(dāng)我們切割代碼后棍潘,首屏的js文件體積減少了好多。但是也有一個(gè)突出的問題:

那就是當(dāng)跳轉(zhuǎn)其他頁(yè)面的時(shí)候崖媚,需要下載相應(yīng)頁(yè)面的js文件亦歉,這就導(dǎo)致體驗(yàn)極其不好,每一次點(diǎn)擊訪問新頁(yè)面都要等待js文件下載畅哑,然后再去請(qǐng)求接口獲取數(shù)據(jù)鳍徽。頻繁出現(xiàn)loading動(dòng)畫的體驗(yàn)真的不好

所以如果我們?cè)谶M(jìn)入首頁(yè)后,在瀏覽器的空閑時(shí)間提前下好用戶可能會(huì)點(diǎn)擊頁(yè)面的js文件敢课,這樣首屏的js文件大小得到了控制阶祭,而且再點(diǎn)擊新頁(yè)面的時(shí)候,相關(guān)的js文件已經(jīng)下載好了直秆,就不再會(huì)出現(xiàn)loading動(dòng)畫濒募。

動(dòng)態(tài)引入js文件,實(shí)現(xiàn)code-splitting圾结,減少首屏打開時(shí)間

// 代碼分割后的react組件
const Brand = asyncComponent(() => import(
 /*webpackChunkName: 'mp-supports'*/
  './views/Brand'
))


// 路由引入

<Route path="/" component={App}>
    <Route path="/brand" component={Brand} />
 </Route>

首頁(yè)組件的生命周期:

// 在接口取的數(shù)據(jù)后瑰剃,進(jìn)行prefetch
componentDidUpdate({ topics }) {
  if( topics.length === 0 && this.props.topics.length > 0 ) {
   // 實(shí)行prefetch,注意只有webpack 4版本才支持prefetch功能筝野。
    import(
        /* webpackPrefetch: true */
        /*webpackChunkName: 'topic'*/
        "../topic"
      )
  }
}

關(guān)鍵點(diǎn):

  • /webpackChunkName: 'chunk-name'/

  • componentDidUpdate

這里有兩個(gè)關(guān)鍵點(diǎn):

  1. webpack的動(dòng)態(tài)import()需要指定包命晌姚,如果不在注釋中說明包名,那么用了幾次import() , webpack就會(huì)給同一個(gè)文件打包多少次歇竟。使得我們prefetch的文件和路由中要用到的文件并不是同一個(gè)文件挥唠。

2.prefetch會(huì)在瀏覽器空閑時(shí),下載相應(yīng)文件焕议。這是一個(gè)很籠統(tǒng)的定義宝磨,在我的使用中,我發(fā)現(xiàn)在接口沒有返回?cái)?shù)據(jù)盅安,以及圖片等還沒有請(qǐng)求成功時(shí)唤锉,prefetch就會(huì)請(qǐng)求數(shù)據(jù)了。這一點(diǎn)是很不好的别瞭,最起碼prefetch不能影響首頁(yè)接口的獲取速度窿祥。所以我把prefetch的執(zhí)行事件放在了componentDidUpdate生命周期內(nèi)。保障了prefetch的執(zhí)行蝙寨,不會(huì)影響到關(guān)鍵的首頁(yè)數(shù)據(jù)獲取晒衩。
當(dāng)然prefetch在服務(wù)端渲染的頁(yè)面并不會(huì)有影響接口的問題号胚,是一個(gè)比較好的技術(shù)選擇。

參考資料

Preload, Prefetch And Priorities in Chrome
Preload: What Is It Good For?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浸遗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子箱亿,更是在濱河造成了極大的恐慌跛锌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件届惋,死亡現(xiàn)場(chǎng)離奇詭異髓帽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脑豹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門郑藏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘩欺,你說我怎么就攤上這事必盖。” “怎么了俱饿?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵歌粥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我拍埠,道長(zhǎng)失驶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任枣购,我火速辦了婚禮嬉探,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棉圈。我一直安慰自己涩堤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布分瘾。 她就那樣靜靜地躺著定躏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芹敌。 梳的紋絲不亂的頭發(fā)上痊远,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音氏捞,去河邊找鬼碧聪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛液茎,可吹牛的內(nèi)容都是我干的逞姿。 我是一名探鬼主播辞嗡,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼滞造!你這毒婦竟也來了续室?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤谒养,失蹤者是張志新(化名)和其女友劉穎挺狰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體买窟,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丰泊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了始绍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳购。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖亏推,靈堂內(nèi)的尸體忽然破棺而出学赛,到底是詐尸還是另有隱情,我是刑警寧澤吞杭,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布罢屈,位于F島的核電站,受9級(jí)特大地震影響篇亭,放射性物質(zhì)發(fā)生泄漏缠捌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一译蒂、第九天 我趴在偏房一處隱蔽的房頂上張望曼月。 院中可真熱鬧,春花似錦柔昼、人聲如沸哑芹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)聪姿。三九已至,卻和暖如春乙嘀,著一層夾襖步出監(jiān)牢的瞬間末购,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工虎谢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盟榴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓婴噩,卻偏偏與公主長(zhǎng)得像擎场,于是被迫代替她去往敵國(guó)和親羽德。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 1 Webpack 1.1 概念簡(jiǎn)介 1.1.1 WebPack是什么 1迅办、一個(gè)打包工具 2宅静、一個(gè)模塊加載工具 3...
    Kevin_Junbaozi閱讀 6,665評(píng)論 0 16
  • 隨著前端頁(yè)面的復(fù)雜化,網(wǎng)頁(yè)的載入速度是越來越慢了站欺,而最近的日子里面姨夹,Google 等公司也是在大力推動(dòng) PWA 的...
    azzgo閱讀 871評(píng)論 0 2
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,981評(píng)論 3 119
  • 至少到現(xiàn)在為止镊绪,這輩子做過最后悔的一件事就是沒有參加高考。青春可能只有一次洒忧,那高三也只有一次蝴韭,再想聚齊,那也是很難...
    嗶一閱讀 436評(píng)論 0 0
  • 籍山鎮(zhèn)中心小學(xué) 陳麗華 前些天和寶爸寶媽們交流熙侍,我建議寶爸寶媽們要鼓勵(lì)寶寶們多問榄鉴。有疑就要問,有...
    粒粒橙clh閱讀 591評(píng)論 0 3