爲了減少http請求,以及使js/css文件更容易推出,我已經安裝了我的php應用程序來連接js和css文件。使用每個文件的2個字母代碼(例如home.js代碼=「AA」)將所有包含的文件按順序合併爲一個大文件。要生成名稱,我按照它們加載的順序組合所有代碼,添加下劃線,然後添加時間戳(例如「AABACE_12345678.js」)。然後在他們的服務目錄中,我在htaccess中使用apache指令來解析php文件(唱sethandler),這樣我就可以控制標題,並且返回301標題不變。在JS/CSS緩存
不幸的是,這是行不通的......我用螢火蟲的Net面板和liveHTTPHeaders測試了它的廢話。該頁面每次都會加載該文件,即使它應該放在緩存中。這裏的響應頭文件的回報的一個示例:
Date Wed, 14 Jul 2010 17:00:28 GMT
Cache-Control private
Content-Encoding gzip
Etag "4b4a6d50f9acf924b9dce14e415f5c78"
Expires Wed, 28 Jul 2010 17:00:28 GMT
Vary Accept-Encoding
X-Powered-By PHP/5.2.6
Last-Modified Wed, 14 Jul 2010 16:59:35 GMT
Content-Length 39305
Content-Type text/css
注意:我省略了一些非高速緩存相關的頭,喜歡的keepAlive,服務器等
我也應該注意到,我m有條件地壓縮內容,因此是私有緩存控制頭。我在這裏錯過了什麼?內容應該由於過期標題而被緩存。我從文件名+時間戳的md5生成etag,以便從不改變文件。上次修改從未改變,過期時間永遠不會改變....
[編輯]
所以進一步檢查之後,我的css文件越來越緩存,但我的JavaScript是沒有的。如果我有兩個文件,IDENTICAL緩存標題(etag,expires,last-modified,cache-control),但唯一不同的是內容類型(一個「text/css」一個「text/javascript」),只有css正在緩存...令人沮喪的
我假設你的意思是最後一個filemtime()時間戳,而不是當前時間戳? – Wrikken 2010-07-14 17:14:50
@Wrikken - 正確。每次包含的js/css文件中的一個被更新時,它都會創建一個新名稱,並將當前時間戳作爲名稱的一部分。但是用於生成Etag/Last-modified頭的時間戳等於filetime()返回的內容。 – eCaroth 2010-07-14 18:32:34
好的,但只是要特別確定:所需文件的時間戳保持不變,並且您在指示要加載的文件時自動記住時間戳?如果是這樣,你有我們測試的網址嗎? YOu不會是'我正在開發這個網站,因此不要在個人瀏覽器中緩存任何'個人設置'的第一個被挫敗的東西。 – Wrikken 2010-07-14 23:24:56