2010-11-23 52 views
1

偶爾我會從使用我的網站的用戶那裏獲得佈局怪癖的報告,答案往往是,使用Ctrl-F5 /清除緩存來刷新瀏覽器。當在Subversion中更改文件時更新資源(CSS/JS)的路徑

我認爲處理這個問題的最簡單方法是將SVN修訂追加到類似styles.css?1234這樣的資源的路徑中,但我想知道這是否有點過分(例如,SVN修訂不會改變資源將會強制不必要的獲取)。此外,它需要通過並找到所有這些路徑並添加一些代碼來輸出SVN修訂版。

有沒有更好的/標準的方法來處理這個問題?

值得一提的是,我使用Django和Apache與mod_wsgi。

回答

2

使用文件的上次修改時間戳會更好。然後你可以避免使用版本號時遇到的問題。您也可以在每次獲取最新版本號的請求時使用磁盤(如果使用此方法,請使用緩存),或者在部署時在「編譯」步驟中更改包含語句。

此外,如果您的確做了styles.css?123某些代理/瀏覽器可能不會緩存該文件,無論過期標題如何。最好做styles.123.css,所有代理都將其視爲一個單獨的文件。

有一個項目已經解決了這個問題,我用它自己取得了巨大的成功:django-compress。你告訴它如何壓縮你的javascript和css,然後它會縮小/壓縮,將它們連接在一起成爲一個大文件,併爲大文件提供一個包含時間戳的特殊文件名。包含知道要包含哪個文件的文件時,還會使用模板標記。

Django的1.3還將包括名爲staticfiles的應用程序,它與提供靜態媒體幫助,但它並沒有解決版本的問題。

+0

謝謝 - django-compress看起來正是我所追求的。 – 2010-11-23 10:25:07

0

我過去使用的一種技術是確保我使用的每個靜態資產引用的模板標記。然後我可以根據需要更改該標籤,無論是否需要將URL更改爲資產目錄,還可以根據需要添加緩存空間。

即使文件沒有發生變化,我也不會擔心會對每個SVN修訂版強制執行不必要的提取操作 - 這比每次提供新文件更有效。

有各種圖書館爲你做這種事情。 knutin已經提到django-compress,還有django-static-managementdjango-static和其他很多。除了處理cachebusting之外,這些應用程序通常還包含某種壓縮/連接,以便將多個CSS或JS文件連接成一個以減少HTTP請求。