一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET Core緩存靜態資源示例詳解

ASP.NET Core緩存靜態資源示例詳解

2020-05-23 15:29Chaunce ASP.NET教程

我們在優化Web服務的時候,對于靜態的資源文件,通常都是通過客戶端緩存、服務器緩存、CDN緩存,這三種方式來緩解客戶端對于Web服務器的連接請求壓力的。下面這篇文章主要給大家介紹了關于ASP.NET Core緩存靜態資源的相關資料

背景

緩存樣式表,JavaScript或圖像文件等靜態資源可以提高您網站的性能。在客戶端,總是從緩存中加載一個靜態文件,這樣可以減少對服務器的請求數量,從而減少獲取頁面及其資源的時間。在服務器端,由于它們的請求較少,服務器可以處理更多的客戶端而無需升級硬件。

雖然緩存是一件好事,但您必須確保客戶端始終運行最新版本的應用程序。當您部署下一個版本的網站時,您不希望客戶端使用過時的緩存版本的文件。

方案:

為確保用戶始終使用最新版本的文件,我們必須為每個文件版本提供一個唯一的URL。有很多策略:

  • 使用查詢字符串: http://sample.com/file.js?v=123
  • 重命名文件: http://sample.com/file.123.js
  • 創建一個目錄: http://sample.com/123/file.js

ASP.NET Core提供了一種使用 TagHelper來追加版本與查詢字符串的機制。它支持以靜態資源為目標的最常見的HTML標簽:script,link和img。所有你需要做的是在對應Html標簽中追加asp-append-version="true"

?
1
2
3
<link rel="stylesheet" href="~/css/site.css" rel="external nofollow" asp-append-version="true" />
<script src="~/js/site.js" asp-append-version="true"></script>
<img src="~/images/banner1.svg" asp-append-version="true" />

在瀏覽器中的展現:

?
1
2
3
<link rel="stylesheet" href="/css/site.css?v=1wp5zz4e-mOPFx4X2O8seW_DmUtePn5xFJk1vB7JKRc" rel="external nofollow" />
<script src="/js/site.js?v=EWaMeWsJBYWmL2g_KkgXZQ5nPe-a3Ichp0LEgzXczKo"></script>
<img src="/images/banner1.svg?v=GaE_EmkeBf-yBbrJ26lpkGd4jkOSh1eVKJaNOw9I4uk" />

每個文件都會有對應的V值,并存儲在一個IMemoryCache

文件的URL現在是唯一的,并且會在文件更改時更改,所以我們可以將緩存頭添加到響應中,以指示客戶端文件可以永久存儲在緩存中

實踐

為了指示瀏覽器將文件存儲在緩存中,我們必須發送Cache-control頭文件和Expires頭文件以實現HTTP/1.0兼容性。為了添加這些頭文件,我們使用了OnPrepareResponse回調函數StaticFilesOptions。我們來修改這個Startup.cs文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 app.UseStaticFiles(new StaticFileOptions
 {
 OnPrepareResponse = context =>
 {
  //緩存一年
  if (!string.IsNullOrEmpty(context.Context.Request.Query["v"]))
  {
  context.Context.Response.Headers.Add("cache-control", new[] { "public,max-age=31536000" });
  context.Context.Response.Headers.Add("Expires", new[] { DateTime.UtcNow.AddYears(1).ToString("R") }); // Format RFC1123
  }
 }
 });
 
 app.UseMvc(routes =>
 {
 routes.MapRoute(
  name: "default",
  template: "{controller=Home}/{action=Index}/{id?}");
 });
}

 可以查看開發者控制臺,發現靜態資源都被緩存:

ASP.NET Core緩存靜態資源示例詳解

如果不想緩存某個靜態文件,修改Startup.cs文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
app.UseStaticFiles(new StaticFileOptions
   {
    OnPrepareResponse = context =>
    {
     //緩存一年
     //以下操作是UseStaticFiles內部默認實現
     if (!string.IsNullOrEmpty(context.Context.Request.Query["v"]))//資源添加asp-append-version="true"后v是查詢參數
     {
      //context.Context.Response.Headers.Add("cache-control", new[] { "public,max-age=31536000" });
      context.Context.Response.Headers.Add("cache-control", new[] { "public,no-cache" });
      context.Context.Response.Headers.Add("Expires", new[] { DateTime.UtcNow.AddYears(1).ToString("R") }); // Format RFC1123
     }
    }
   });

會發現無論怎么刷新,site.js?v=7mkNbU1tgQL1bUeZe3j2R151hKLhLDKO4BBaR-iqCy0文件永遠都是重新請求,并沒有使用緩存機制

 ASP.NET Core緩存靜態資源示例詳解

結論

使用HTTP緩存對于性能方面的原因(客戶端和服務器端)非常重要。使用ASP.NET Core,您可以利用提供的功能TagHelpers來生成版本控制的URL,并更改默認配置StaticFilesMiddleware為資源Urls添加header的Cache-control屬性 。

ASP.NET Core緩存靜態資源示例詳解

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/xiaoliangge/p/7872050.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 特级www| 亚洲 日韩 国产 制服 在线 | 久久r视频 | 天天色视频 | 国产精品免费看久久久香蕉 | 清纯漂亮女友初尝性过程 | 国产亚洲精品第一综合另类 | 无限韩国视频免费播放 | 秘书在办公室疯狂被hd | 狠狠色狠狠色综合系列 | 日剧整部剧护妻狂魔免费观看全集 | 激情小视频 | 精品国产在天天线在线麻豆 | 亚洲成人影院在线 | 激情另类国内一区二区视频 | 丰满的闺蜜2中文字幕 | 免费看h片的网站 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 国产精品第一区揄拍 | 国产免费视 | a片毛片在线免费看 | 青青草国产免费久久久91 | 91精品久久| 人与动videos | 456成人免费高清视频 | 四虎免费在线观看视频 | 日韩夫妻性生活 | 4444亚洲国产成人精品 | 97se狠狠狠狠狼亚洲综合网 | 毛片免费观看的视频 | 我的年轻漂亮继坶三级 | 无限在线观看视频大全免费高清 | 我与恶魔的h生活ova | 黑人干亚洲人 | 污污动图| 高清国产激情视频在线观看 | 欧美人做人爱a全程免费 | 四虎影院久久 | 9久re在线观看视频精品 | 日韩一区二三区无 | 亚洲AV无码国产精品色午夜情 |