2013-07-21 71 views
12

我正在研究一個適度大小的Web應用程序,並嘗試提出使所有瀏覽器都使用緩存並使其失效的最佳解決方案何時對正在加載的資產進行更新。管理所有資產緩存(圖像,CSS,js,一切)的最佳實踐

根據我在這裏和其他地方所做的研究,每個人似乎都一致認爲將一個?v = {version#}附加到諸如css或js文件之類的資產是自動使當資產更新時緩存。 (根據Force browser to clear cacheBetter way to prevent browser caching of JavaScript files

但在我看來,這種解決方案應該推廣到駐留在Web服務器上的所有資產。

所以我的問題是,通過整個網站的每個src =「」屬性來查看構建腳本是否是一種很好的做法 - 無論是img,css還是js,並以編程方式追加?= {timestamp}其中時間戳是上次修改文件的時間。通過這種方式,無論您何時從開發人員推送到製作,只有那些已被修改的文件纔會有更改的時間戳記,並且瀏覽器會知道使這些文件的緩存無效。

這種方法的缺陷?

注意:考慮到這一點多一點,時間戳肯定會在後來恢復的變化的情況下不受歡迎。因此,追加?= {md5(filecontents)}是更健壯的方法。不過,是否貫穿所有資產和所有建築物的問題依然存在。

+0

有趣的問題。期待答案:) – null

+0

@ajkochanowicz這不是一個通用的解決方案,即使RoR爲你處理這個問題。我提出的問題適用於所有Web服務器和所有開發環境。要問的一個好問題是,RoR如何實現自己的解決方案,並將其推廣到所有開發環境?由於問題無處不在,應該有一個開放源代碼解決方案的層面來解決問題。 –

回答

5

發現我認爲是可接受的解決方案How to force browser to reload cached CSS/JS files?不知道我在原始調查中是如何遺漏的。

對於任何想到這個問題的人,請注意我指的是鏈接頁面上的第一個答案,該鏈接頁面引用了Google針對apache的mod_pagespeed插件。這可以在Web服務器級別工作,因此「使用PHP,rails,python,靜態HTML - 可以工作 - 任何東西。」

這正是我所尋找的解決方案。這個工具或類似的東西應該被所有的web開發者使用,以保持緩存邏輯與代碼本身正交。

+0

只是爲了澄清像我這樣的人在這裏找到他們的方式,@PeterThorpe的答案指的是[here](http://stackoverflow.com/a/5588394/3462483) – doz87