微信瀏覽器緩存導致白屏扼菠,我們該如何解決和避免摄杂?

原文地址:https://juejin.cn/post/7129829677484474376

微信瀏覽器緩存

做前端開發(fā)的小伙伴肯定都經(jīng)歷過,項目升級后循榆,原本公眾號內(nèi)的鏈接析恢,訪問進去白屏了,有些人甚至刷新都沒有效果秧饮,在生產(chǎn)環(huán)境中這可是個大問題映挂。

很多小伙伴說給 url 加版本號或者時間戳泽篮,在某些瀏覽器實現(xiàn)忽略參數(shù)的情況下,也依然起不到很好的效果柑船。

歸根結(jié)底就是前端資源被微信瀏覽器強緩存了帽撑。

現(xiàn)在大多前端項目都是用一些主流的打包工具進行打包,例如:webpack鞍时、rollup 等亏拉,我們的 js、css 文件都可以在打包的時候設(shè)置帶有 hash 值的文件名逆巍,對于瀏覽器來說及塘,資源地址變了,就可以有效的規(guī)避掉緩存問題蒸苇。

但是磷蛹,拿 Vue 項目為例,入口文件 index.html 這個文件是不會變得溪烤,但是里面引入的 js味咳、css 會隨著打包的變化而變化,這就導致之前說的檬嘀,白屏問題槽驶。

白屏問題分析

由于第一次發(fā)布時沒有配置 Cache-Control:no-cache ,觸發(fā)了瀏覽器默認緩存靜態(tài)資源的策略:

max-age =(你訪問的時間 - 最后一次修改時間)/ 10

所以鸳兽,這就造成 index.html 文件還是老的掂铐,但是 js、css 文件都更新了揍异,由于這些資源文件都帶 hash全陨,所以服務(wù)端這邊資源就訪問不到了,導致頁面白屏衷掷。

瀏覽器的緩存資源流程

瀏覽器的緩存資源流程

強緩存:不會和服務(wù)器交互辱姨,不會發(fā)起請求

協(xié)商緩存:會和服務(wù)器交互,來判斷資源有沒有變化

這張圖就很清晰的表達了整個瀏覽器緩存命中的過程戚嗅,而我們之前的問題正式命中了瀏覽器的強緩存雨涛。

而強緩存的特點就是:強緩存發(fā)現(xiàn)資源未過期時,會直接返回 200 (from memory cache 或者 disk cache)懦胞。目的本身是為了減少網(wǎng)絡(luò)請求的時間消耗而實現(xiàn)頁面快速加載替久,但是用不好,也是一個雙刃劍啊躏尉,尤其是單頁面應(yīng)用需要經(jīng)常發(fā)布的場景下蚯根。

如何解決?

既然了解了瀏覽器的緩存機制胀糜,也了解了問題的原因颅拦,那么解決辦法就很明顯了吼具。

一句話,想辦法讓客戶端請求一次服務(wù)端把新的資源拿到矩距!

  1. 如果是直接請求*.html 的方式,可以考慮文件名后增加隨機數(shù)或者時間戳怖竭,url 的變更會觸發(fā)重新請求锥债。但是,如果是通過 nginx 轉(zhuǎn)發(fā)訪問到 index.html 的情況痊臭,我試過但線上依然會有白屏的案例出現(xiàn)哮肚,因為畢竟是 get 請求 text/html 文本資源。
  2. 給原項目增加 path广匙,類似 xxx.com/#/ 改為 xxx.com/nocache/#/ 這種方式允趟,確保瀏覽器會重新發(fā)起請求。

當然鸦致,以上的方案都是治標不治本潮剪,屬于補救措施。

其實分唾,我們可以使用協(xié)商緩存與強緩存配合的方式抗碰,來達到客戶端既能及時響應(yīng),又可以在未發(fā)布時提高加載效率绽乔。

如何避免弧蝇?

我們可以利用協(xié)商緩存的機制來處理入口文件 index.html 和一些圖片資源,在其更新之后立即拉取折砸,未更新時返回 304 來命中緩存看疗。

其余的文件資源(js、css睦授、json两芳、字體文件等)則可以采用周期強緩存,這個周期可以選平均發(fā)版周期或半個發(fā)版周期這樣睹逃,來減少 http 請求連接數(shù)盗扇。

至于如何激活協(xié)商緩存,那就是文章開頭提到的:Cache-Control: no-cache沉填。

關(guān)于Cache-Control疗隶,本文不做進一步介紹,有興趣的小伙伴可以前往 MDN查看翼闹。

最后

很多項目工程中遇到的問題斑鼻,不單單是前端開發(fā)本身的問題,我們依然需要了解包括代碼運行環(huán)境猎荠,計算機網(wǎng)絡(luò)等很多相關(guān)知識才可以解決坚弱。

保證基本功的同時蜀备,也多多了解其他相關(guān)知識才能幫助我們在這條路上走的更遠~

PS:開發(fā)過程中遇到的各種問題都建議做一下筆錄哦~

時間久了你會感謝自己的~

參考

掃地盲僧:《高階前端指北》之快速吃透瀏覽器緩存機制圖解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荒叶,隨后出現(xiàn)的幾起案子碾阁,更是在濱河造成了極大的恐慌,老刑警劉巖些楣,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脂凶,死亡現(xiàn)場離奇詭異,居然都是意外死亡愁茁,警方通過查閱死者的電腦和手機蚕钦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹅很,“玉大人嘶居,你說我怎么就攤上這事〈僦螅” “怎么了邮屁?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長菠齿。 經(jīng)常有香客問我樱报,道長,這世上最難降的妖魔是什么泞当? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任迹蛤,我火速辦了婚禮,結(jié)果婚禮上襟士,老公的妹妹穿的比我還像新娘盗飒。我一直安慰自己,他們只是感情好陋桂,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布逆趣。 她就那樣靜靜地躺著,像睡著了一般嗜历。 火紅的嫁衣襯著肌膚如雪宣渗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天梨州,我揣著相機與錄音痕囱,去河邊找鬼。 笑死暴匠,一個胖子當著我的面吹牛鞍恢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼帮掉,長吁一口氣:“原來是場噩夢啊……” “哼弦悉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蟆炊,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤稽莉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涩搓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肩祥,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年缩膝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岸霹。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡疾层,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贡避,到底是詐尸還是另有隱情痛黎,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布刮吧,位于F島的核電站湖饱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杀捻。R本人自食惡果不足惜井厌,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望致讥。 院中可真熱鬧仅仆,春花似錦、人聲如沸垢袱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽请契。三九已至咳榜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爽锥,已是汗流浹背涌韩。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氯夷,地道東北人贸辈。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親擎淤。 傳聞我的和親對象是個殘疾皇子奢啥,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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