|
|
目录# P* i- P6 V3 s( {) }* f a
1 p7 N4 k5 @2 G3 |- I; a) P9 x
3 O% s& }" N% r+ K( e: M- 误区1:未使用 Brotil 压缩: x: {1 w1 J, b6 b0 c
- 误区2:使用 Fastest 级别的 Brotli 压缩/ V% A1 k) f! }& U4 q
- 误区3:使用 Optimal 级别的 Brotli 压缩; H1 E* j1 o# Z$ W- A0 h% ^, z
' y$ H! X* D+ S误区1:未使用 Brotil 压缩
$ W4 `+ m- I( `0 a
" P) V0 `) t( [* ?+ G; Y# x/ c8 S7 L2 s7 H6 C
几乎不需要任何额外的代价,Brotil 压缩算法可以帮助你的网站提升约 20% 静态资源加载性能。
. k, C) @" p( u A9 b E 同时启用 Gzip / Brotil 压缩/ c% e9 x( M) N! L
Gzip 有更好的 user-agent 兼容性,而 Brotli 有更好的性能。1 F6 ?" e3 i) C
所以我们通常需要在 ASP.NET Core 网站中同时启用这两种压缩。
' W, q9 r3 V: Q0 U6 | 如何区分 Gzip 压缩和 Brotli 压缩
. E. J9 o. t2 t 网站启用 Brotli 压缩时,服务器请求返回头 Content-Encoding 中会包含 br 字样,否则是 gzip。: h i4 s; Z( [ m2 b; W# l
; l# P6 F6 ^7 D% H8 J% D1 `) D( l
误区2:使用 Fastest 级别的 Brotli 压缩
) U) s: A0 V1 A/ o) ]2 A& {4 @' U9 u+ I4 K$ H' ~
4 C( e8 ?* E6 R' s' a, ]0 Q N 如果你阅读并参考了微软官方文档或者其他中文资源,比如:6 j* ~1 ^5 G4 L( f$ c. a3 c1 Z
ASP.NET Core 中的响应压缩 - MS Doc
* J( I6 G! k! J7 ^% \1 f7 ` 在ASP.NET Core中使用brotli压缩 - Cnblogs5 [% h1 o9 v8 Q6 w( w8 p7 Y
那么你可能会在代码中像下面这样使用压缩功能:
7 L: D' Y! e9 ~' g( k" h2 z' Z6 o 写法1:使用默认的压缩行为(框架将隐式添加 Brotli 和 Gzip 功能)- public class Startup{ public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseResponseCompression(); }}
复制代码 写法2:显式添加压缩功能- public void ConfigureServices(IServiceCollection services){ services.AddResponseCompression(options => { options.Providers.Add(); options.Providers.Add(); options.Providers.Add(); options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "image/svg+xml" }); }); services.Configure(options => { options.Level = CompressionLevel.Fastest; });}
复制代码 写法3:自定义 BrotliCompressionProvider- public class BrotliCompressionProvider : ICompressionProvider{ public string EncodingName => "br"; public bool SupportsFlush => true public Stream CreateStream(Stream outputStream) { return new BrotliStream(outputStream,CompressionLevel.Fastest); }}
复制代码 不幸的是,以上三种写法都没有发挥出 Brotil 压缩算法的优势。
/ o! @( O- c% e4 b3 j# G0 f 它们的共同点是均使用了 CompressionLevel.Fastest 压缩级别。
9 z1 j% U$ y8 D0 C. R 而在 CompressionLevel.Fastest 级别时,Brotil 与 Gzip 压缩性能几乎无异。. z3 L/ g, E8 x/ r5 O* s* ^
参考:Introducing Support for Brotli Compression
- B1 i6 P$ P5 {. e
9 @/ m- @8 Y9 k4 @
3 |% o0 E) _- p$ ^2 }' Z* S2 d误区3:使用 Optimal 级别的 Brotli 压缩" a! G0 K! {0 U6 s) l6 p) N
/ K7 e8 H0 K/ l) e2 k4 P( h' t1 X9 Y; i
1 E. u' c2 J& O4 c Q
CompressionLevel 只有三个枚举值:Fastest / NoCompression / Optimal。& F5 ^$ T' C% b% m
既然 Fastest 级别没有用,那我们只能换成 Optimal 了。
6 o* V2 l' J; S
, v/ c0 W @+ {7 E) i5 _4 J# @. I4 B0 e& A* U* ^) @
最佳实践:使用 4 或 5 级别的 Brotli 压缩/ i j! s, e6 J4 A; \# Z& X0 y( u
在 Introducing Support for Brotli Compression 这篇文章中,作者对不同级别 Brotil 的压缩耗时做了评测,也就是下面这幅图。+ l4 O! ?- {. Z2 Y& |
( O6 Z- P; t/ } f9 { o* t* ^9 Y 观察这副图,Brotil 的压缩质量其实有 1~11 个级别。8 g: |: x! u" O) G2 g! m0 i+ l" }
那我们如何自定义 Brotli 的压缩级别呢,答案是直接将级别对应的整数转成 CompressionLevel 枚举。1 [! _# Z: B/ P G4 \3 ^

& a: c/ i% L% D4 C \ 尽管这种写法看起来十分古怪,但通过考察 .NET 源码,可以确凿这种写法是可行的。
+ m1 _: h% X) O; ^以上就是ASP.NET Core 文件响应压缩的常见使用误区的详细内容,更多关于ASP.NET Core 文件响应压缩的资料请关注脚本之家其它相关文章!
! q6 |$ C% O, y* j5 X8 @, j9 F
: |0 o& Q/ F& ]' p. F- S来源:http://www.jb51.net/article/213748.htm% p& c! g. m6 V, e1 @
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|