分享一個控制JS 瀏覽器緩存的解決辦法。


    JS 緩存的問題一直都是我們又愛又恨的東西。也是我們比較頭痛的問題,

         一方面為了提高網站響應速度,減少服務器的負擔,和節省帶寬,將需要將靜態資源緩存在客戶端,

         但是另一方面,當js 文件有改動的時候,如何快速的將客戶端緩存的js文件都失效,這是非常頭痛的問題。

         以至於每次客戶反饋問題的時候,我們第一個解決辦法都是清理瀏覽器緩存。

 

         那么如何解決呢。

 

         1. 直接禁止全部的靜態文件緩存

                   在html 頭部加上如下代碼:

                   <META HTTP-EQUIV="pragma" CONTENT="no-cache">

                   <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">

                   <META HTTP-EQUIV="expires" CONTENT="0">

 

         這樣所有的js 文件都不會被緩存。這顯然是不可取的。

        

         2.加版本號,在每個js的后面,都加上js 的版本號,

         <script src="test.js?v=101"></script>

        

         當某個js文件有變動時,則修改該js文件的版本號。這樣就能解決js 沒有更新時,能夠緩存js文件,有變動的時,也能更新到最新的js的問題。

        

         但是每次js 有變動時,所有引用到改js的地方都得改一遍,這太麻煩了吧。

        

         有辦法:

         1.創建公共js文件,將所有需要控制的js文件加入到JSHash 里面

         //// js files map 本文件可獨立運行,無需依賴於其他文件

         var strSite = window.location.protocol + "//" + window.location.host + "/"; //// 網站主機頭

        

         var JSHash = { 

                   test: { url: strSite + "test.js",type:"javascript", version: "v0001" },

         }

        

         function loadJS(keys) {

                   if (keys) {

                            for (var i = 0; i < keys.length; i++) {

                                     var jsnode = JSHash[keys[i]];

                                     if(jsnode.type="javascript")

                                     {

                                               document.writeln("<script type=\"text/javascript\" src=\"" + jsnode.url + "?" + jsnode.version + "\"></script>");

                                     }

                                     else

                                     {

                                               document.writeln("<link type="text/css" href=\"" + jsnode.url + "?" + jsnode.version + "\" />");

                                     }

                            }

                   }

         }

        

         2. 在相關頁面引用js 的方改為:loadJS(["test"]);  

        

         這樣每一次更新的時候,只需要調整相關JS的版本號即可。

        

        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM