第十三節:視圖緩存、緩存標記、響應壓縮

一. 視圖緩存瀏覽器

1.對比與區別緩存

  Core中的ResponseCache和老版MVC中的OutputCache定位不同,OutputCache是緩存在服務器內存中的,因此你給一個視圖加上標籤, 無論幾個客戶端(瀏覽器)訪問,只有第一個進方法內,在緩存的有效時間裏其餘客戶端都是從緩存中訪問,不進實際方法。服務器

  而Core中的ResponseCache,是存儲在瀏覽器裏的,在同一個瀏覽器,當用多個標籤打開頁面,只有第一個標籤進方法內,其餘標籤均不進方法,從本地緩存中拿值,可是手動刷新頁面、地址欄回車、換個瀏覽器訪問 均至關一次新的請求,是要進服務器方法的,從新獲取cookie

我的觀點:Core中的ResponseCache用戶不大,不多有場景會使用它。分佈式

2.  分享一下代碼ide

 1         [ResponseCache(Duration = 600)]
 2         //[ResponseCache(VaryByHeader = "User-Agent", Duration = 5)]
 3         //[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
 4         //[ResponseCache(Duration = 10, Location = ResponseCacheLocation.Client, NoStore = false)]
 5         //[ResponseCache(CacheProfileName = "test1")]
 6         public IActionResult Index()
 7         {
 8             //Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.CacheControl] = "public, max-age=600";
 9 
10             //Response.GetTypedHeaders().CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
11             //{
12             //    Public = true,
13             //    MaxAge = TimeSpan.FromSeconds(600)
14             //};
15 
16             ViewBag.t1 = DateTime.Now.ToString();
17             return View();
18         }

 

二. 緩存標記svg

1. 說明spa

  分爲內存緩存和分佈式緩存,內存緩存用<cache></cache>標籤,分佈式緩存用<distributed-cache></distributed-cache>標籤,但分佈式緩存必需要有一個name屬性, name 是必需的,name 屬性用做每一個存儲的緩存實例的鍵。 分佈式緩存標記幫助程序分配緩存鍵時只以屬性 name 上的鍵爲基礎,這點與內存緩存標記幫助程序不一樣, 內存緩存的標記程序基於 Razor 頁面中的 Razor 頁面名稱和位置爲每一個實例分配緩存鍵。code

注:緩存標記程序不須要在ConfigureService中註冊。xml

2. 兩者相關屬性是同樣的

 (1) enabled:肯定是否啓用,省略的話默認爲true

 (2) expires-on: 爲緩存項設置一個絕對到期日期,如:<cache expires-on="@new DateTime(2019,7,17,12,02,0)"> 2019年7月17 12點02分過時

 (3) expires-after:經過間隔的形式設置絕對過時時間,如: <cache expires-after="@TimeSpan.FromSeconds(2)">

 (4) expires-sliding:設置滑動過時時間

 (5) vary-by-header:接受逗號分隔的標頭值列表,在標頭值發生更改時觸發緩存刷新,如User-Agent,每一個瀏覽器不一樣

 (6) vary-by-query:vary-by-query 接受查詢字符串(Query) 中逗號分隔的 Keys 列表,它們在任何列出的鍵值發生更改時觸發緩存刷新。

 (7) vary-by-route: 接受路由參數名稱的逗號分隔列表,用於在路由數據參數值發生更改時觸發緩存刷新。

 (8) vary-by-cookie:接受 Cookie 名稱的逗號分隔列表,用於在 Cookie 值發生更改時觸發緩存刷新。

 (9) vary-by-user:指定當已登陸用戶(或上下文主體)發生更改時是否應重置緩存

 (10) vary-by:容許自定義緩存的數據。 當屬性的字符串值引用的對象發生更改時,會更新緩存標記幫助程序的內容

 (11) priority:設置移除級別

 代碼分享:

 1   <h4>下面是緩存標記程序</h4>
 2     <p>
 3         <cache enabled="true">
 4             Current Time Inside Cache Tag Helper: @DateTime.Now
 5         </cache>
 6     </p>
 7     <p>
 8         <cache expires-on="@new DateTime(2019,7,17,12,02,0)">
 9             Current Time Inside Cache Tag Helper: @DateTime.Now
10         </cache>
11     </p>
12     <p>
13         <cache expires-after="@TimeSpan.FromSeconds(2)">
14             Current Time Inside Cache Tag Helper: @DateTime.Now
15         </cache>
16     </p>
17     <p>
18         <cache expires-sliding="@TimeSpan.FromSeconds(60)">
19             Current Time Inside Cache Tag Helper: @DateTime.Now
20         </cache>
21     </p>
22     <p>
23         <cache vary-by-header="User-Agent">
24             Current Time Inside Cache Tag Helper: @DateTime.Now
25         </cache>
26     </p>
27     <p>
28         <cache vary-by-query="Make,Model">
29             Current Time Inside Cache Tag Helper: @DateTime.Now
30         </cache>
31     </p>
32     <p>
33         <cache vary-by-route="Make,Model">
34             Current Time Inside Cache Tag Helper: @DateTime.Now
35         </cache>
36     </p>
37     <p>
38         <cache vary-by-cookie=".AspNetCore.Identity.Application">
39             Current Time Inside Cache Tag Helper: @DateTime.Now
40         </cache>
41     </p>

三. 響應壓縮

 1. 在ConfigureService中注入下面代碼:

 1             //響應壓縮的配置
 2             services.AddResponseCompression(options =>
 3             {
 4                 //options.Providers.Add<BrotliCompressionProvider>();
 5                 //options.Providers.Add<GzipCompressionProvider>();
 6                 //本身定義一個壓縮
 7                 options.Providers.Add<CustomCompressionProvider>();
 8                 options.MimeTypes =
 9                     ResponseCompressionDefaults.MimeTypes.Concat(
10                         new[] { "image/svg+xml" });
11             });
12 
13             services.Configure<GzipCompressionProviderOptions>(options =>
14             {
15                 options.Level = CompressionLevel.Fastest;
16             });

 

 

 

 

 

 

!

  • 做       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 本人才疏學淺,用郭德綱的話說「我是一個小學生」,若有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文連接或在文章開頭加上本人博客地址,不然保留追究法律責任的權利。
相關文章
相關標籤/搜索