2011-12-06 139 views
1

如果你有一個實時網站(使用PHP,MySQL,JS,CSS)並且說你改變了一些功能。確保最好的方式是,當用戶訪問該網站時,更改的頁面會更新並且不會從緩存中加載?網站更新緩存

回答

3

對於這種共振有文件裝載機。當您加載css,js或任何其他文件時,您必須設置緩存控制標頭。你可以通過編輯.htaccess或者使用php來完成。

.htaccess演示

<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresDefault A300 
ExpiresByType image/x-icon A2592000 
ExpiresByType application/x-javascript A3600 
ExpiresByType text/css A3600 
ExpiresByType image/gif A604800 
ExpiresByType image/png A604800 
ExpiresByType image/jpeg A604800 
ExpiresByType text/plain A300 
ExpiresByType application/x-shockwave-flash A604800 
ExpiresByType video/x-flv A604800 
ExpiresByType application/pdf A604800 
ExpiresByType text/html A300 
</IfModule> 

PHP演示:

$offset = 3600 * 24; 
$expire = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT"; 
header($expire); 
+0

不要忘記將mod_expires安裝到apache。許多主機不支持它。 –

+0

感謝您的回覆!看起來這可能是解決方案。數字是多少? A300等,是多久緩存在幾秒鐘? – georgesamper

+0

@George是的。你可以閱讀更多在http://httpd.apache.org/docs/1.3/mod/mod_expires.html –

1

通過HTML,在頭節放...

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
+0

有趣的是,我從來沒有聽說過。如果可以的話,它是否總是加載一個新的頁面? –

+0

是的,Expires元指定頁面已經過期並且不能從緩存加載。但是它永遠不會緩存,所以即使頁面沒有改變,它仍然會從服務器請求一個新的頁面。 – craig1231

+0

如果內容保持不變,那麼將所有內容都設置爲不緩存是一個壞主意。 – epascarello

-1

可以使用window.applicationCache.swapCache();和window.location.reload();強制重新加載頁面一次JavaScript確認有一個網站的更新版本。

更好的選擇可能是以某種方式提示用戶,讓他們知道該網站已更新。這樣,頁面不會突然重新加載。

function updateCache(){ 
    window.applicationCache.swapCache(); 
    window.location.reload(); 
} 

window.applicationCache.addEventListener("updateready", updateCache, false); 
+0

緩存控制必須通過HEADERS而不是javascript來完成。 –

+0

這將與結合使用。我對你說的話感到困惑。 –

+0

您的解決方案僅適用於即將發佈新聞的網頁。或秒。但如何爲圖像設置緩存?而window.applicationCache只適用於html5。 –

0

你真的無法控制的政策的每一個瀏覽器,如果符合這些標準,但一般什麼情況是瀏覽器下載在決定是否應該從緩存中加載或重新下載之前,從每個HTML中獲取頭文件。

檢查RFC HTTP 1.1 Header Field瞭解更多詳情(特別是高速緩存控制下)

0

除非你有某種形式的緩存會將用戶的請求數據,如果已經更新檢查。通常你的PHP不會被緩存,除非你有主動緩存。

你的JS和CSS將不得不通過HEADERS在Apache下設置(或者你使用的任何Web服務器)。