2011-11-18 135 views
1

我在c#中有一個MVC應用程序。我有一個包含多個圖像的頁面。一旦頁面被加載,所有的圖像都被存儲在瀏覽器的緩存中。但是當我改變圖像時,它會替換舊圖像。由於舊圖像和新圖像具有相同的名稱,並且正在從瀏覽器的緩存中提取圖像。但是,如果使用Ctrl + F5刷新頁面,則會呈現新圖像。有什麼辦法可以從瀏覽器的緩存中只刪除舊圖像嗎?我無法刪除瀏覽器的所有緩存,因爲它包含許多應該緩存的圖像。只有該圖像應該從正在更改的緩存中刪除。從瀏覽器的緩存中清除對象mvc


非常感謝您的回覆。有一點我應該在這裏提到: 1.我無法使用查詢字符串,因爲單個頁面包含許多具有不同圖像的部分,並且該特定圖像在不同部分呈現。 2.我無法添加新的guid或日期時間與圖像的url,因爲如果我這樣做,然後每次刷新頁面時都會發生新的服務器調用,並且圖像將來自服務器,並且該頁面將呈現相同的圖像不少地方。

因此,爲了減少服務器調用並提高性能,我只能從瀏覽器緩存中刪除該圖像。

回答

0

不可能不通過一大堆麻煩去,相信我,你真的只是想在這裏按Ctrl + F5)

2

是否像有一個像版本或創建的日期時間的唯一值?如果是這樣,你可以將它添加到文件名或作爲查詢字符串。瀏覽器會緩存圖像,但QueryString中的新值將請求新圖像。

0

如果您保存一個新圖像,比如說爲用戶提供一個新的配置文件圖像,您可以使用Guid.NewGuid()作爲文件名(或文件名的一部分),以保證獨特的圖像這將在瀏覽器中重新加載。

+0

非常感謝您的回覆。有一點我應該在這裏提到: –

1

完成此操作的一種方法是在映像更改時更改的圖像URL上附加查詢字符串。一滴死了簡單的使用:

'image.jpg?' + new Date().getTime() 

這會給我這樣的URL:

"image.jpg?1321626971855" 

現在你會這樣更智能地在你的JavaScript僅通過改變時間戳(或添加時間戳)當圖像被改變時。

+0

我認爲@Cymen建議的解決方案可能是實現這一目標的最快方法。長期以來,您可能需要熟悉HTTP緩存,以及如何配置Web服務器以爲每種文件提供正確的緩存信息:http://betterexplained.com/articles/how-to-optimize-your- site-with-http-caching/ –

+0

這是一個很好的解決方案,但我認爲你需要提及的是,圖像永遠不會被你的簡單例子緩存。 – Dallas

+0

我寧願不使問題複雜化。我假設URL正在通過JavaScript進行更改,因此,僅更改已更改圖像的URL是明智的。這是一個具體的實現。這是一個很好的觀點,非常好! – Cymen

相關問題