溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

討厭的瀏覽器緩存

發(fā)布時(shí)間:2020-08-10 14:58:59 來(lái)源:網(wǎng)絡(luò) 閱讀:767 作者:BoyTNT 欄目:編程語(yǔ)言

瀏覽器出于性能考慮,對(duì)js/css一類的靜態(tài)資源,并不是每次都向服務(wù)器詢問(wèn)此資源是否有更新,各位一定都有這樣的經(jīng)歷:明明服務(wù)器上的腳本更新了,但抓包發(fā)現(xiàn)瀏覽器根本沒(méi)有發(fā)請(qǐng)求詢問(wèn),直接就使用了本地的緩存,結(jié)果導(dǎo)致蹦了腳本錯(cuò)誤提示,非要F5甚至Ctrl+F5強(qiáng)制刷新一下才好。

頁(yè)面我們可以強(qiáng)制瀏覽器不緩存,但資源不受我們控制,目前可行的方法就是加后綴,每次資源有更新時(shí)就變換這個(gè)后綴,讓瀏覽器認(rèn)為它是新資源。比如用版本號(hào)做后綴,這樣:

  1. <script type="text/javascript" src="../scripts/core.js"></script> 
  2. 改為 
  3. <script type="text/javascript" src="../scripts/core.js?115"></script> 

不過(guò)缺點(diǎn)也是顯而易見(jiàn)的,維護(hù)起來(lái)太麻煩了,很容易漏,除非你有合適的發(fā)布工具來(lái)干這件事。

換一個(gè)方法,用資源的最后更新時(shí)間做后綴,只要寫一個(gè)公共方法就好了,以ASP.Net為例:

  1. <script type="text/javascript" src="<%= UI.Get("../scripts/core.js") %>"></script> 
  1. using System; 
  2. using System.IO; 
  3. using System.Web; 
  4.  
  5. namespace Test.WebUI 
  6.     public class UI 
  7.     { 
  8.         public static string Get(string url) 
  9.         { 
  10.             return string.Format("{0}?{1}", url, File.GetLastWriteTime(HttpContext.Current.Server.MapPath(url)).Ticks); 
  11.         } 
  12.     } 

這下終于解脫了。

 

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI