一. 视图缓存浏览器
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 });
!