css和js帶引數v或version

風靈使發表於2019-04-19

css和js帶引數(形如.css?v=.js?v=.css?version=.js?version=

<script type="text/javascript" src="jb51.js?version=1.2.6"></script>  
<link rel="stylesheet" href="base.css?version=2.3.3" type="text/css" />  

使用引數有兩種可能:

第一、指令碼並不存在,而是服務端動態生成的,因此帶了個版本號,以示區別。 即上面程式碼對於檔案來說 等價於

<script type="text/javascript" src="jb51.js"></script>  
<link rel="stylesheet" href="base.css" type="text/css" /> 

但瀏覽器會認為他是該檔案的某個版本!

第二、客戶端會快取這些cssjs檔案,因此每次升級了jscss檔案後,改變版本號,客戶端瀏覽器就會重新下載新的jscss檔案,重新整理快取的作用。大家可能有時候發現修改了樣式或者js,重新整理的時候不變,就是客戶端快取了css或者js檔案,因此加上引數還是有好處的!

第二種情況最多,也可能兩種同時存在。


背景

在搜尋引擎中搜尋關鍵字.htaccess 快取,你可以搜尋到很多關於設定網站檔案快取的教程,通過設定可以將css、js等不太經常更新的檔案快取在瀏覽器端,這樣訪客每次訪問你的網站的時候,瀏覽器就可以從瀏覽器的快取中獲取css、js等,而不必從你的伺服器讀取,這樣在一定程度上加快了網站的開啟速度,又可以節約一下你的伺服器流量。

問題

現在問題來了,.htaccess設定的css、js快取都有一個過期時間,如果在訪客的瀏覽器中已經快取了css、js,在這些css、js快取未過期之前,瀏覽器只會從快取中讀取cssjs,如果你在伺服器上修改了cssjs,那麼這些更改在回頭客的瀏覽器中是不會有變化的,除非回頭客按了Ctrl + F5重新整理了你的網站頁面或者手動清空了瀏覽器的快取。一個網站的訪客成千上萬,回頭客也會有不少,你不可能在更新css後讓每個訪客都重新整理一下快取吧,那麼這個問題你會怎麼處理呢?

方法一

更改css檔名:其實解決這個問題很簡單,快取是通過檔名標記快取的內容的。在你更新了網站的css檔案內容後,在更換一下css的檔名就可以了。如原先html中的css呼叫語句如下:

<link rel="stylesheet" href="style.css" />

改一下css檔名就可以了:

<link rel="stylesheet" href="index.css" />

另外一種更改css檔名的方法是將版本號寫到檔名中,如:

<link rel="stylesheet" href="index.v2011.css" />

css檔案更新後,改一下檔名中的版本號即可:


<link rel="stylesheet" href="index.v2012.css" />

方法二

css檔案加個版本號:其實每次修改css檔案後還要修改css的檔名有點麻煩,那麼我們可以在載入css語句中加入個版本號(即css連結中?後面的內容)就可以了。如原先html中的css呼叫語句如下:

<link rel="stylesheet" href="style.css?v=2011" />

改一下css檔案的版本號改成2012就可以了:

<link rel="stylesheet" href="style.css?v=2012" />

需要注意的是,部分代理快取伺服器不會快取網址中包含 “?” 的資源,所以方法二可能會導致你原先的快取功能失效,可以改用第一種方法。

總結

其實css檔案後面的問號起不到實際作用,僅能當作字尾,如果用問號加引數的方法,可以新增版本號等資訊,同時可以重新整理一下瀏覽器端的快取。一個小小的細節,可以給我們帶來很大的方便。

相關文章