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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男人狂躁女人下半身 | 香蕉精品高清在线观看视频 | 激情婷婷成人亚洲综合 | 韩国理论片最新第一页 | 性欧美xxxxxxx另类 | 4444亚洲国产成人精品 | 国产亚洲视频网站 | 跪在老师脚下吃丝袜脚 | 国产成人99精品免费观看 | 晓雪老师我要进你里面好爽 | 久久久精品3d动漫一区二区三区 | gay台湾无套男同志可播放 | 国产一级特黄aa大片在线 | 王晶经典三级 | 午夜精品久久久久 | 91制片| 国产第一福利影院 | 小寡妇好紧进去了好大看视频 | 国产乱码在线精品可播放 | 色亚洲色图 | 特色特色大片在线 | a级免费在线观看 | 精品伊人 | 亚欧美综合 | 国产一卡2卡3卡四卡高清 | 日本高清中文字幕 | 99精品免费观看 | 四虎影院地址 | 波多野结衣同性系列698 | 男女男精品视频免费观看 | 亚洲美日韩 | 亚洲第一区在线观看 | 俄罗斯一级成人毛片 | 韩国禁片在线观看久 | 国色天香社区在线视频免费观看 | 男人的j进入女人的j免费 | 欧美ay | 国产成人啪精品午夜在线观看 | 亚洲同性男男gay1069 | 石原莉奈被店长侵犯免费 | 天美影视传媒mv直接看 |