vue構建項目入口文件index.html緩存引發(fā)的白屏問題

問題

??vue項目打包后澄步,在非首次線上替換dist文件時,某些手機/瀏覽器在之后首次打開頁面目锭,可能出現(xiàn)白屏情況。那么該問題產(chǎn)生原因是什么呢纷捞?我們又該如何應對呢痢虹?

背景及原因分析

??在使用vue-cli腳手架構建完項目,項目完成后主儡,需打包上線奖唯。默認打包方式則是npm build,然后項目根目錄會生成 dist 文件夾糜值。服務端將該文件夾替換線上即可丰捷。但是當?shù)趎(n>1)次上線后,由于在用戶端會默認緩存index.html入口文件寂汇,而由于vue打包生成的css/js都是哈希值病往,跟上次的文件名都不同,因此會出現(xiàn)找不到css/js的情況骄瓣,導致白屏的產(chǎn)生停巷。

??經(jīng)常使用vue作為開發(fā)框架的開發(fā)者都知道,build打包后榕栏,所生成的css/js的文件名中間會夾雜哈希值畔勤,以此來避免緩存問題。但是由于入口文件index.html的名字每次打包后不改變扒磁,并且也不能亂變庆揪,就導致了index.html在用戶端仍然會被緩存下來。那么在服務端更新包之后妨托,由于舊的文件被刪除缸榛,而index.html所鏈接的路徑依然是舊文件路徑检访,因此會找不到文件,從而白屏仔掸。解決方案一般是強制刷新頁面或者清除緩存重新加載脆贵。當然,網(wǎng)上也給出不少的“緩解方案”起暮。為什么稱之為緩解方案而不是解決方案呢卖氨?因為前端緩存問題是一個具有行業(yè)性的難題,在沒有根治之前负懦,一般是優(yōu)化為主筒捺。當然,引領前端行業(yè)的大佬們自然是要挑戰(zhàn)極限的纸厉,不在該問題之內(nèi)討論系吭。
??下面給出部分優(yōu)化方案。

優(yōu)化方案

方案1. meta標簽

<!-- 在入口文件index.html中颗品,頭部添加meta標簽 -->
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">

方案2. 時間戳區(qū)分

// webpack.prod.conf.js
const Version = new Date().getTime();

output: {
    path: config.build.assetsRoot,
    filename: utils.assetsPath('js/[name].[chunkhash].'+_Version+'js'),
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].'+_Version+'js')
}
方案3. 服務端配置
// nginx端配置
location = /index.html {
    add_header Cache-Control "no-cache, no-store";
    # add_header Cache-Control no-store;
    # add_header Pragma no-cache;
}

方案對比

方案 操作難度 優(yōu)缺點
1 html文件簡單修改 基本上沒用
2 webpack配置簡單修改 跟hash值文件名一個性質(zhì)肯尺,不解決痛點
3 服務端加配置,簡單 解決部分緩存問題躯枢,不解決全部则吟;白屏問題依舊存在

新思路

??在一些論壇中,在某些特定情況下(如混合開發(fā)App锄蹂,原生嵌入webview還在h5)氓仲,可在原生端嘗試解決:

  • 加載webview前清除緩存再加載;
  • 銷毀webview前清除緩存得糜;

??效果如何敬扛,有待驗證。

以上朝抖。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啥箭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子槽棍,更是在濱河造成了極大的恐慌捉蚤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炼七,死亡現(xiàn)場離奇詭異缆巧,居然都是意外死亡,警方通過查閱死者的電腦和手機豌拙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門陕悬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人按傅,你說我怎么就攤上這事捉超‰事保” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵拼岳,是天一觀的道長枝誊。 經(jīng)常有香客問我,道長惜纸,這世上最難降的妖魔是什么叶撒? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮耐版,結果婚禮上祠够,老公的妹妹穿的比我還像新娘。我一直安慰自己粪牲,他們只是感情好古瓤,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腺阳,像睡著了一般落君。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舌狗,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天叽奥,我揣著相機與錄音,去河邊找鬼痛侍。 笑死,一個胖子當著我的面吹牛魔市,可吹牛的內(nèi)容都是我干的主届。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼待德,長吁一口氣:“原來是場噩夢啊……” “哼君丁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起将宪,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤绘闷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后较坛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體印蔗,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年丑勤,在試婚紗的時候發(fā)現(xiàn)自己被綠了华嘹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡法竞,死狀恐怖耙厚,靈堂內(nèi)的尸體忽然破棺而出强挫,到底是詐尸還是另有隱情,我是刑警寧澤薛躬,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布俯渤,位于F島的核電站,受9級特大地震影響型宝,放射性物質(zhì)發(fā)生泄漏八匠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一诡曙、第九天 我趴在偏房一處隱蔽的房頂上張望臀叙。 院中可真熱鬧,春花似錦价卤、人聲如沸劝萤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽床嫌。三九已至,卻和暖如春胸私,著一層夾襖步出監(jiān)牢的瞬間厌处,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工岁疼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阔涉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓捷绒,卻偏偏與公主長得像瑰排,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子暖侨,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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

  • 我相信每個人都有說不出的秘密椭住, 關于任何事。 我有二者字逗,其一是我的家庭京郑, 應該算是人的一生中最重要的兩件事了吧。 ...
    一子子閱讀 402評論 0 0
  • 不是因為付了錢葫掉,就可以隨便浪費 開始享用美味的早餐前些举,香香老師跟大家講了昨天中午餐后結賬時, 服務員嚴厲批評了我們...
    請叫我小S閱讀 592評論 0 2
  • 薔薇花開了 作者:藍波春子 薔薇花開了 在春花都已開過之后 在熙熙攘攘賞花的人潮之后 在一片片贊賞之后 在楊柳花輕...
    藍波春子閱讀 210評論 0 10
  • 撿漏绪抛,大家都知道用較低的價格淘到較高品質(zhì)的藏品或者文玩资铡。 撿漏,是一句古玩界的行話幢码,形象的體現(xiàn)在‘撿’上笤休,因為古玩...
    一木一語閱讀 335評論 0 0