.NET Core 中間件之壓縮、緩存

前言算法

今天給你們介紹一下在 ASP.NET Core 平常開發中用的比較多的兩個中間件,它們都是出自於微軟的 ASP.NET 團隊,他們分別是Microsoft.AspNetCore.ResponseCompression 和 Microsoft.AspNetCore.ResponseCaching , 下面讓咱們一塊兒看看的功能以及如何去使用吧。json

Getting Started瀏覽器

Microsoft.AspNetCore.ResponseCompression緩存

Microsoft.AspNetCore.ResponseCompression 這個中間件是 .NET Core 1.1 版本中新增長的,看名字應該知道,它主要是負責對輸出的內容進行壓縮, 那麼在咱們WEB開發中主要就是 GZip 壓縮了。性能優化

Gzip 壓縮是咱們在 WEB 中常常會使用的一項性能優化技術,它能夠對頁面輸出的內容使用壓縮算法(GZip)進行體積的壓縮, 那在之前的時候,咱們可使用 IIS 來作這項工做,可是如今咱們的程序脫離 IIS了,就必須有一箇中間件來幫咱們作這件事情了,它就是咱們要介紹的這個中間件。app

一、添加 Microsoft.AspNetCore.ResponseCompression 包性能

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

1
Install-Package Microsoft.AspNetCore.ResponseCompression

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

添加完成以後,你就能夠在 project.json 中看到你添加的包了。注意目前版本是 1.0.0.優化

二、更新 Startup.cs 文件

修改 Startup , 在ConfigureServices 和Configure 兩個方法中添加以下代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Startup
{
   ...
  
   public void ConfigureServices(IServiceCollection services)
   {
     services.AddResponseCompression();
     
     ...
   }
  
   public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
   {
     app.UseResponseCompression();
     
     ...
   }
}

如今你就能夠測試一下輸入的 Http Response 是否被壓縮了。

前:

後:

經過 前 後 對比,能夠看出來,在 Response Headers 裏面多了一個 Content-Encoding:gzip 的頭部信息,說明咱們的中間件生效了。

Microsoft.AspNetCore.ResponseCaching

Microsoft.AspNetCore.ResponseCaching 這個中間件也是 .NET Core 1.1 版本中新增長的,一樣看名字應該知道,它主要是負責對輸出的內容進行緩存設置。在之前咱們能夠一樣在 IIS 中設置這些東西,可是粒度可能並無這麼細。

我以前寫過一篇關於 ASP.NET Core 緩存的文章,裏面介紹了 ASP.NET Core MVC 中的 Response 緩存,它是經過一個 ResponseCacheAttribute 來實現的設置緩存頭信息:

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

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

?
1
2
3
4
5
6
7
8
9
public IActionResult About()
{
   Response.GetTypedHeaders().CacheControl = new CacheControlHeaderValue()
   {
     Public = true ,
     MaxAge = TimeSpan.FromSeconds(10)
   };
   Response.Headers[HeaderNames.Vary] = new string [] { "Accept-Encoding" };
}

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

有了這些頭信息以後,咱們就能夠在服務端裏面這個中間件幹些什麼事情了。因此,該中間件將會在適當的時候讀取這些頭信息,而後緩存到本地緩存裏面,當再有請求進來的時候會直接跳過action,讀取緩存信息進行返回。

下面,咱們一塊兒來看看怎麼樣添加到咱們的項目中吧,很簡單。

一、添加 Microsoft.AspNetCore.ResponseCaching 包

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

?
1
Install-Package Microsoft.AspNetCore.ResponseCaching

二、更新 Startup.cs 文件

修改 Startup , 在ConfigureServices 和Configure 兩個方法中添加以下代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Startup
{
   ...
  
   public void ConfigureServices(IServiceCollection services)
   {
     services.AddResponseCaching();
     
     ...
   }
  
   public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
   {
     app.UseResponseCaching();
     
     ...
   }
}

輸入的頭信息以下:

注意:上面的示例在 Chrome 瀏覽器中,當你按 F5 或者右鍵刷新頁面時候, Http Response Header 中的 Control-Cache: max-age 有時候可能會不生效,這是由於 Chrome 瀏覽器有很智能的算法來猜想你當前的行爲是真的想刷新仍是取緩存。 因此你能夠試着把你的地址放入到一個HTML的Link中或者新開一個選項卡鍵入地址嘗試。而Edge和IE瀏覽器行爲是符合預期的。

總結

以上是這兩個中間件的功能及使用方法,很簡單,就很少說了,但願對你們的學習有所幫助

相關文章
相關標籤/搜索