溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ASP.NET Core中間件的壓縮及緩存介紹

發(fā)布時(shí)間:2021-09-01 10:43:20 來源:億速云 閱讀:205 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要講解了“ASP.NET Core中間件的壓縮及緩存介紹”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“ASP.NET Core中間件的壓縮及緩存介紹”吧!

前言

今天給大家介紹一下在 ASP.NET Core 日常開發(fā)中用的比較多的兩個(gè)中間件,它們都是出自于微軟的 ASP.NET 團(tuán)隊(duì),他們分別是Microsoft.AspNetCore.ResponseCompressionMicrosoft.AspNetCore.ResponseCaching , 下面讓我們一起看看的功能以及如何去使用吧。

Getting Started

Microsoft.AspNetCore.ResponseCompression

Microsoft.AspNetCore.ResponseCompression 這個(gè)中間件是 .NET Core 1.1 版本中新增加的,看名字應(yīng)該知道,它主要是負(fù)責(zé)對輸出的內(nèi)容進(jìn)行壓縮, 那么在我們WEB開發(fā)中主要就是 GZip 壓縮了。

Gzip 壓縮是我們在 WEB 中經(jīng)常會使用的一項(xiàng)性能優(yōu)化技術(shù),它可以對頁面輸出的內(nèi)容使用壓縮算法(GZip)進(jìn)行體積的壓縮, 那在以前的時(shí)候,我們可以使用 IIS 來做這項(xiàng)工作,但是現(xiàn)在我們的程序脫離 IIS了,就必須有一個(gè)中間件來幫我們做這件事情了,它就是我們要介紹的這個(gè)中間件。

1、添加 Microsoft.AspNetCore.ResponseCompression 包

你可以使用 Visual Studio 打開 NuGet 包管理器控制臺輸入一下命令安裝

Install-Package Microsoft.AspNetCore.ResponseCompression

也可以使用 NuGet包管理器UI界面安裝。

添加完成之后,你就可以在 project.json 中看到你添加的包了。注意目前版本是 1.0.0.

ASP.NET Core中間件的壓縮及緩存介紹

2、更新 Startup.cs 文件

修改 Startup , 在ConfigureServices 和Configure 兩個(gè)方法中添加如下代碼:

public class Startup
{
  ...
 
  public void ConfigureServices(IServiceCollection services)
  {
    services.AddResponseCompression();
    
    ...
  }
 
  public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
  {
    app.UseResponseCompression();
    
    ...
  }
}

現(xiàn)在你就可以測試一下輸入的 Http Response 是否被壓縮了。

前:

ASP.NET Core中間件的壓縮及緩存介紹

后:

ASP.NET Core中間件的壓縮及緩存介紹

通過 前 后 對比,可以看出來,在 Response Headers 里面多了一個(gè) Content-Encoding:gzip 的頭部信息,說明我們的中間件生效了。

Microsoft.AspNetCore.ResponseCaching

Microsoft.AspNetCore.ResponseCaching 這個(gè)中間件也是 .NET Core 1.1 版本中新增加的,同樣看名字應(yīng)該知道,它主要是負(fù)責(zé)對輸出的內(nèi)容進(jìn)行緩存設(shè)置。在以前我們可以同樣在 IIS 中設(shè)置這些東西,但是粒度可能并沒有這么細(xì)。

我之前寫過一篇關(guān)于 ASP.NET Core 緩存的文章,里面介紹了 ASP.NET Core MVC 中的 Response 緩存,它是通過一個(gè) ResponseCacheAttribute 來實(shí)現(xiàn)的設(shè)置緩存頭信息:

[ResponseCache(VaryByHeader ="Accept-Encoding", Location = ResponseCacheLocation.Any, Duration = 10)]
public IActionResult About()
{
}

那,除了 MVC 提供的 ResponseCacheAttribute 外,還有另外一種方式設(shè)置緩存頭信息,如下:

public IActionResult About()
{
  Response.GetTypedHeaders().CacheControl = new CacheControlHeaderValue()
  {
    Public = true,
    MaxAge = TimeSpan.FromSeconds(10)
  };
  Response.Headers[HeaderNames.Vary] = new string[] { "Accept-Encoding" };
}

這兩種方式,最終的效果是一致的。

有了這些頭信息之后,我們就可以在服務(wù)端里面這個(gè)中間件干些什么事情了。所以,該中間件將會在適當(dāng)?shù)臅r(shí)候讀取這些頭信息,然后緩存到本地緩存里面,當(dāng)再有請求進(jìn)來的時(shí)候會直接跳過action,讀取緩存信息進(jìn)行返回。

下面,我們一起來看看怎么樣添加到我們的項(xiàng)目中吧,很簡單。

1、添加 Microsoft.AspNetCore.ResponseCaching 包

你可以使用 Visual Studio 打開 NuGet 包管理器控制臺輸入一下命令安裝

Install-Package Microsoft.AspNetCore.ResponseCaching

2、更新 Startup.cs 文件

修改 Startup , 在ConfigureServices 和Configure 兩個(gè)方法中添加如下代碼:

public class Startup
{
  ...
 
  public void ConfigureServices(IServiceCollection services)
  {
    services.AddResponseCaching();
    
    ...
  }
 
  public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
  {
    app.UseResponseCaching();
    
    ...
  }
}

輸入的頭信息如下:

ASP.NET Core中間件的壓縮及緩存介紹

詳細(xì)示例可以看這里.

注意:上面的示例在 Chrome 瀏覽器中,當(dāng)你按 F5 或者右鍵刷新頁面時(shí)候, Http Response Header 中的 Control-Cache: max-age 有時(shí)候可能會不生效,這是因?yàn)?Chrome 瀏覽器有很智能的算法來猜測你當(dāng)前的行為是真的想刷新還是取緩存。 所以你可以試著把你的地址放入到一個(gè)HTML的Link中或者新開一個(gè)選項(xiàng)卡鍵入地址嘗試。而Edge和IE瀏覽器行為是符合預(yù)期的。

感謝各位的閱讀,以上就是“ASP.NET Core中間件的壓縮及緩存介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對ASP.NET Core中間件的壓縮及緩存介紹這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI