我們的使用者量大,修改js檔案後,使用者反饋登入出現問題。實際上重新整理一下就沒事了。就是因為使用者的瀏覽器使用的還是本地快取的js**。
強制重新整理一般就會重新去伺服器獲取新的js**。但不能讓使用者每次都這樣子去做。
於是我思考乙個問題:
如果修改了js檔案中的js**,發布**到線上後。使用者的瀏覽器使用的還是原來js快取。所以並不會馬上生效。
如何才能讓瀏覽器使用最新的js檔案呢?
很多人想到的第一反應是,在在後面加乙個時間戳來解決。這樣url位址每次變化,瀏覽器就會請求服務端的js,而不會使用快取。
這樣是解決了。但是會導致瀏覽器每次都要去請求服務端的js檔案。占用頻寬。作為技術,能不能有種更好的辦法呢?既能避免使用者的瀏覽器每次去請求服務端獲取js檔案。又能在發布新的js**後,能夠使用最新的js檔案?
據說,在問號後面加版本號,現在很多**都這麼幹。加個版本號能夠解決問題嗎?
加個版本號,js有個版本。如果每次發布新的js**。後面就會附加新的版本號。然後使用者載入html頁面的時候。版本號附加在在
如果沒有修改,那麼版本號還是原來的,這樣做到了:不發布**的時候,瀏覽器使用的是本地快取。因為版本號沒有變化。
現在疑問是,js的版本號如何生成呢?
生成乙個日期嗎?
當天的日期比較好。
這樣的確解決了問題。讓使用者可以使用。
只不過出現乙個新的問題來臨了。
js檔案加上當天的發布日期作為版本號即可了。
有些人針對url後面帶時間戳的做法,會導致瀏覽器每次請求都不會快取,因為每次請求時間都會變化,url就變化了,於是瀏覽器認為是乙個新的位址了。
有人針對這個問題的解決辦法是:
這裡uri不是靜態,可能會造成某些瀏覽器不會進行快取,可以採用偽靜態配合url重寫來解決
1、修改js的檔名。我覺得這樣很麻煩。造成版本系統的維護困難。不建議。除非是完全ftp。不過每次發布都修改檔名稱。的確造成維護的時候很茫然,接手的人看到檔名稱變化,會比較難維護2、路徑後面加時間戳或者隨機數的方式。
一般都是在html模版中使用乙個時間戳或者隨機數函式生成乙個值。
今天和明天的值不同了,重新請求伺服器。
使用時間戳,每重新整理一次html,值都不同。隨機數也是一樣的
不推薦使用這種方式。
因為這樣的方式導致的問題是,每次重新整理html,時間戳都是變化的,url就總是唯一的,於是瀏覽器總是去請求服務端獲取js檔案,不會使用瀏覽器本地的快取。占用頻寬,影響速度
3、路徑後面加js的版本號。這樣是業界比較成熟的做法。
關鍵是這個版本號,怎麼做版本? 難道真的納入版本系統裡面去?不是的。我突然靈感來,想到一種程式設計師自己控制的辦法。
自己主動加時間,如果本次發布,修改了哪幾個js檔案。那麼就在後面加上乙個時間點:年月日
如果一天會發布多次對js檔案的修改,那麼程式設計師還要精確點。年月日時分秒即可。
如下:
我去看了一下**,發現也是這樣一種方式額,不知道對不對?
如下:15年8月12日補充:
公司有好幾千萬註冊會員,於是第三方應用使用我們**會員帳號實現在第三方**登入,需要設計oauth2.0授權的平台,於是需要參考微博的oauth體制。
無意中發現他們的css也是使用年月日來控制
進一步思考:
這種加時間方法是可行。。不是系統生成的時間,不是所有js檔案都加。
是不是可以進一步考慮一種辦法,用程式來進行開關呢?
自己勾選。如果這個檔案修改了。那麼就設定為更新。模版中判斷,就根據這個開關,把時間戳自動打上去?
不過這樣子覺得沒必要。因為還沒到那麼重大。其實初期,完全可以程式手動把日期打上去即可了。
該了什麼js檔案,就給哪個js檔案加,這樣已經是折衷了。就跟改**一樣。**都要修改的,這點改也沒多少工作量。
總結思路:
js檔案的內容修改了,可以加個t引數表明一下日期,用這個日期來作為版本號,看到日期也能知道是哪天發布的。
沒有修改js檔案根本就不用修改日期。
實踐:
如果下一次修改了這個js檔案,那麼發布的時候,就修改日期
沒有修改的js檔案,保留原來的值不動即可。
思考:這樣子是不是很麻煩,有更好的方式嗎。目前我沒想到更好的辦法了。這種方式湊合能用。既能夠按需修改,也能夠保證瀏覽器使用快取。達到了折衷和平衡。
xml被瀏覽器快取了
之前在做廣告投放功能,遇到的乙個問題。在頁面上輪播廣告,是通過把廣告資訊儲存成xml檔案,然後在前台通過唯一的id調取該廣告資訊,具體用ajax非同步響應到xml,把廣告內容展示在頁面上。只是ajax響應xml檔案的時候,即使後台對廣告資訊作了相應的修改,可是讀取的還是舊的內容。起初我以為是xml檔...
快取 瀏覽器快取
瀏覽器快取 brower caching 是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 1 瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires...
瀏覽器快取
1.為什麼使用瀏覽器快取 以前了解的動態指令碼加速,或者動態內容快取之類,他們的原理都是避免伺服器重複計算,結果仍保留在伺服器端,這樣獲取資料還得從伺服器檢索然後傳送到使用者瀏覽器,如果我們把這些結果放在瀏覽器中,就省去了伺服器的查詢和網路傳輸,瀏覽器快取很好的實現了這個功能 2.瀏覽器快取存放在哪...