給js加版本號解決瀏覽器緩存問題


我們知道打開網頁時瀏覽器會加載需要的資源,比如圖片、音頻、js文件、css文件等。並且會把這些資源作為緩存保存下來,再次打開網頁時緩存好的資源就不需要再次加載了。但是,這樣有一個問題,就是當程序猿更新了網頁內容后,因為瀏覽器緩存的存在,可能沒有辦法顯示出更新后的內容。

今天我就遇到了這樣的問題,做了一個小游戲的網頁,用到了大量的圖片和音頻,測試時更新的js不能立刻反饋,總是需要清除緩存后刷新才能看到更新。但是大量的圖片和音頻,每次都需要清除緩存也太麻煩了,我就百度了一下有沒有好的解決方法。

百度找到的解決方案就是給js添加版本號,這樣每次更新版本號,瀏覽器就會重新加載js文件,如下:

document.write('<script src="js/main.js?v='+Math.random()+'"><\/script>');

通過隨機數來自動添加版本號,不需要自己手動去添加,實在是省時省力!

 

不過,考慮到隨機數有重復的可能性,即便兩次隨機數正好一樣的可能性及其微小,也不為0,而且隨機數也不夠直觀,不如直接使用時間戳,如下:

document.write('<script src="js/main.js?t='+new Date().getTime()+'"><\/script>');

永遠不會停止流動的時間不可能重復,更何況還精確到了毫秒,而且時間戳也總比隨機數更加明了,可以明確知道js版本的先后。

使用上述方式改了我的程序后,成功避免了緩存問題,不過打開控制台后,發現了新的問題......

谷歌瀏覽器對document.write()發出了警告,查看了谷歌瀏覽器的警告頁,了解到了使用document.write()方式鏈接js文件會導致加載變慢,對網速不好的用戶體驗會變差,不過谷歌舉的例子是使用2g的用戶。

???

現在還有使用2g的史前人類嗎?本來想無視這個警告,不過往下看后發現...谷歌瀏覽器在55版本之后,對於網速不好的用戶,會禁止document.write()方式鏈接的js文件,范圍擴大到了3g和狀況不好的wifi...

這已經是不能忽視的情況了。

想到的解決方法如下:

<script type="text/javascript" src="js/1.js"></script>
<script type="text/javascript" src="js/2.js"></script>
<script type="text/javascript" src="js/3.js"></script>
<script type="text/javascript" src="js/4.js"></script>
<script type="text/javascript" src="js/5.js"></script>
<script>
    var scripts = document.getElementsByTagName("script");
    for(var i = 0;i < scripts.length;i ++){
        if(scripts[i].src){
            scripts[i].src = scripts[i].src+"?t="+new Date().getTime();
        }
    }
</script>

添加一段代碼,動態添加時間戳。但是這樣做有個弊端,可能會使瀏覽器加載兩次js文件。

暫時沒有想到更好的辦法,先這樣,有更好的辦法再補充。


免責聲明!

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



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