為了避免緩存引起的最新js無法載入,所以需要用timestamp來表示。
1、在<script type="text/javascript" src="/js/common.js" ></script>在後面加一個時間戳來解決。這版樣url地址每次變化,瀏覽器就會請求服務端的js,而不會使用緩存。保證頁面每次載入到的都是最新的js文件。
2、還有一種解決方案:
加版本號,js有個版本。如果每次發布新的js代碼。後面就會附加新的版本號。然後用戶載入html頁面的時候。版本號附加在在權
<script type="text/javascript" src="/js/common.js?v=99" ></script>
這樣也可以保證js同步載入到最新的版本。
㈡ 在js中或css中加入v=版本號
添加版本號的原因,可能是因為想要強制瀏覽器不緩存js和css。
1、推薦自動化構工具, webpack之類的,每次寫完編譯文件,自動生成不同的版本的js,css,當然也有小插件可以做到。
2、就是在?v=時間戳,可以把載入js腳本,統一放在一個js裡面 ,聲明時間戳。
㈢ 使用requirejs時怎麼解決文件版號和增量更新的問題
看你前後端用什麼技術了,我知道的大概有3種情況。 在這三種情況之前,首先要說的是requirejs對依賴增加hash的方式是通過參數urlArgs: 'ver='v{version}在require.config統一增加的,就我所知似乎不能單獨對每個模塊設置 (但可能是我錯了),即每次都得批量更新版本號。
1.如果你採用過requirejs,且前後端分離,前端採用yeoman構建,那麼只要找到相應的質量高的requirejs的generator,無論是gulp還是grunt, 其yeoman的generator應該已經處理好文件緩存增量更新的問題了。 2.假使前後端分離,前端由gulp/grunt集成,文件版本號增量更新,用下面幾個插件就能處理的比較完美: gulp-rev gulp-rev-all gulp-useref (grunt也能找到類似的) 其中gulp-rev,計算文件hash值,gulp-useref對html內特定註解標簽下的內容合並重寫,gulp-rev-all會考慮css引用圖片hash值改變的情況從而更新css文件hash。 等等總之只要去找總能通過gulp/grunt解決這個問題。 3.如果你使用rails(ruby)等前端友好框架,可能會有流行的解決方案,如果不幸用了老舊前端不友好的框架SpringMVC(java),用gulp對jsp重編譯比較蛋疼。。我不知道有沒有相應的插件,如果沒有你只能在後台維持這個版本號變數,對頁面所有靜態資源添加這個後綴,類似下面的代碼:
var require = {
baseUrl: '/Content',
urlArgs: 'ver='+${static_resource_version},
paths: {...},
deps: ['scripts/home/about']
}
<script src="/Content/bower_components/requirejs/require.js?ver=${static_resource_version}" async></script>
其中path之內的所有腳本,以及deps內的入口腳本,都會被追加urlArgs,只是這樣還無法達到最理想增量更新就是了。。。 此外,對於文件版本號的後綴args我也推薦使用git commit的hash值。
㈣ 如何自動給CSS、JS添加版本號防止客戶端緩存。
怎麼說呢,個人有個笨點的辦法,就是在代碼中加上JS版本號的全局變數,應用內JS時利用後台代碼添加。容
這樣更改過JS時,將JS的文件名後邊帶上個自定義的版本號,再將JS版本號的變數修改一下就好了。其他程序由於是動態的讀取JS文件名,所以不用再修改,也不用怕漏改。
㈤ html中js文件的版本號如何控制
處理辦法:
1.更改css文件名:其實解決這個問題很簡單,緩存是通過文件名標記緩存的內容的。在你更新了網站的css文件內容後,在更換一下css的文件名就可以了。如原先html中的css調用語句如下:
<link rel="stylesheet" href=「http://www.example.com/style.css」 type="text/css" media="screen" />
改一下css文件名就可以了:
<link rel=「stylesheet」 href="http://www.example.com/index.css" type="text/css" media="screen" />
另外一種從更改css文件名的方法是將版本號寫到文件名中,如:
<link rel="stylesheet" href="http://www.example.com/index.v2011.css" type="text/css" media="screen"/>
css文件更新後,改一下文件名中的版本號即可:
<link rel="stylesheet" href="http://www.example.com/index.v2012.css" type="text/css" media="screen"/>
2.給css文件加個版本號:其實每次修改css文件後還要修改css的文件名有點麻煩,那麼我們可以在載入css語句中加入個版本號(即css鏈接中?後面的內容)就可以了。如原先html中的css調用語句如下:
<link rel="stylesheet" href=「http://www.example.com/style.css?v=2011」type="text/css" media="screen"/>
改一下css文件的版本號改成2012就可以了:
<link rel="stylesheet" href=「http://www.example.com/style.css?v=2012」type="text/css" media="screen"/>
總結:
其實css文件後面的問號起不到實際作用,僅能當作後綴,如果用問號加參數的方法,可以添加版本號等信息,同時可以刷新一下瀏覽器端的緩存。一個小小的細節,帶來很大的方便。
㈥ js 後跟version 後台怎麼控制version
給js加版本號,是一種很畸形的設計。說實話,html版本的變化才是關鍵。js的修改其實對應的html要做新版本才對。
如果非要有,可以考慮設置一個全局的常量,記錄服務啟動的時間值:
public final static SYSTEM_STARUP_TIME = System.currentTimeMillis();
界面直接使用:
<script type="text/javascript" src="/js/2011/oschina.js?<%=SYSTEM_STARUP_TIME %>"></script>
這樣,你要控製版本,只要把你的程序重啟一下,世界從此清靜了。
㈦ 【瀏覽器緩存問題】HTML靜態文件中,css和js可以添加版本號來刷新緩存,但是只是修改的文字了呢
給網址後面添加一個隨機數(或者是任意的字元串)即可,比如原來的網址是這樣的回:
http....../.../1.htm
改為
http....../.../1.htm?1234
即可(注意問號不答能省)。
瀏覽器是根據網址來緩存的,所以只要給網址接個尾巴,瀏覽器就會認為是新網址,就會從網上重新下載數據了。當然,如果下次再次改變了網頁內容,這個尾巴就要再次修改。
給css和js添加所謂版本號其實也是同一個原理。這個版本號其實就是給css和js的網址接個尾巴而已。
這個也同樣適用網頁裡面的圖片、音樂等資源,事實上只要是http協議的元素都可以利用這個辦法來避開緩存實時刷新。