簡體   English   中英

ASP.NET應用程序中的瀏覽器緩存

[英]Browser Caching in ASP.NET application

有關如何在asp.net應用程序中進行瀏覽器緩存的任何建議。 我在網上找到了一些不同的方法,但不確定哪種方法最好。 具體來說,我想緩存我的CSS和JS文件。 它們確實會發生變化,但通常最多每月一次。

另一種技術是將靜態圖像,css和js存儲在另一個正確設置了Expires標頭的服務器(例如CDN )上。 這樣做的好處是雙重的:

  1. expires頭將鼓勵瀏覽器和代理緩存這些靜態文件
  2. CDN將從服務器卸載靜態文件。
  3. 通過為靜態內容使用其他域名,瀏覽器將更快下載。 這是因為從四個或五個不同的主機名提供資源會增加下載的並行化
  4. 如果CDN配置正確並使用無cookie域,那么您就沒有不必要的cookie來回傳遞。

值得注意的是,即使沒有Cache-Control或Expires標頭,大多數瀏覽器也會緩存JS和CSS等內容。 應該發生的事情是瀏覽器應該在每次需要時請求資源,但通常會得到“304未修改”響應,然后瀏覽器使用緩存項。 這可能仍然非常昂貴,因為它往返服務器但資源本身沒有被發送,因此轉移的字節是有限的。

IE沒有關於緩存的具體說明,默認情況下會使用自己的啟發式方法來確定是否應該重新請求緩存的項目。 盡管沒有明確告知它可以緩存資源。 它的hueristics基於資源的Last-Modified日期,它越老,它現在改變的可能性就越小,這是它的典型推理。 非常愚蠢。

坦率地說,如果你想建立一個站點性能,你需要控制這樣的緩存設置。 如果您無權訪問這些設置,則不必擔心性能問題。 只需告知贊助商它可能效果不佳,因為它們沒有促成一個可以讓您實現這一目標的平台。

最好的辦法是在IIS中為要緩存內容的文件夾設置Expires標頭。 這將告訴大多數現代瀏覽器和代理緩存此靜態內容。 在IIS 6中:

  1. 右鍵單擊要由瀏覽器緩存的文件夾(示例CSS或JS)。
  2. 單擊屬性
  3. 轉到HTTP標頭選項卡
  4. 檢查“已啟用內容過期”
  5. 設置一段很長的到期時間,例如“90天后過期”

雅虎開發者博客談論這種技術

您可以通過在web.config中添加以下代碼來緩存靜態內容

 <system.webServer>
    <staticContent>
      <clientCache httpExpires="Tue, 12 Apr 2016 00:00:00 GMT" cacheControlMode="UseExpires" />
    </staticContent>
</system.webServer>

有關更多詳細信息,請參閱clientCache文檔

除非您將IIS配置為對js / css / image請求進行asp.net控制,否則默認情況下不會看到它們,因此您的最佳計划(長期可維護性)是故意調整防火牆/ trafficmanager / server上的響應頭或者 (更好,以及世界上大多數人在這一點上做了什么) 在路徑中對文件進行版本化即:

而不是在你的加價中寫這個:

http://www.foo.com/cachingmakesmesad.css

用這個:

http://www.foo.com/cachingmakesmesad.css?v1

..並在需要有效清除緩存時更改版本號。 如果那是每次,那么你甚至可以添加一個GUID或日期戳,但我想不出任何我想要真正做到這一點的場合。


我認為你的問題是反緩存但重新閱讀它我看到我在那里浪費了一個很好的答案:P

簡而言之,瀏覽器通常非常積極地支持“簡單”資源,因此您不必擔心這一點,但如果您確實想要對其執行某些操作,則必須能夠訪問防火牆/流量管理器/ IIS由於上述原因(默認情況下ASP.NET不會有機會)。

但是......你絕對不能強制緩存,也不應該。 什么是和不是緩存是最終用戶的決定,你所能做的就是強烈要求。

在.net中,您可以將JavaScript,CSS和圖像設置為嵌入式資源。 然后.Net將為您處理文件過期。 這種方法的缺點是您必須為每組更改執行新的構建(這可能是一個好處,具體取決於您的部署和工作流程)。

您也可以使用ETag,但根據我的理解,在某些情況下,如果您混合使用IIS和承載圖像的Apache Web服務器 ,(或者如果您計划將來切換),則無法正常工作。

您可以確保文件日期更新,讓服務器為您處理,但您必須確保服務器配置正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM