|
目录
" `- o$ L3 V0 u) m+ g# a# |; X3 a2 @- J6 [% U: n: @6 E( O
( ^ m6 M4 F1 n
- 误区1:未使用 Brotil 压缩
* O2 Q2 A# i4 o. ^. H1 B" b1 \ - 误区2:使用 Fastest 级别的 Brotli 压缩/ M& j: J, l. G) ]9 ` n2 a
- 误区3:使用 Optimal 级别的 Brotli 压缩
* Y, w, f! n- r4 {$ ^
8 b$ b4 W7 Q d7 V4 \4 k7 N误区1:未使用 Brotil 压缩 s- l1 I2 C' V8 }: v
; z8 S) e* Z j2 b! k+ |& r! Y Z2 N0 O
几乎不需要任何额外的代价,Brotil 压缩算法可以帮助你的网站提升约 20% 静态资源加载性能。
: `3 ^" B/ s9 {# j 同时启用 Gzip / Brotil 压缩* w. d6 L, G# }0 l* E
Gzip 有更好的 user-agent 兼容性,而 Brotli 有更好的性能。
: {* x% A* k; x- T" O 所以我们通常需要在 ASP.NET Core 网站中同时启用这两种压缩。
4 [& T2 s$ P# F4 O& s8 p0 [* J 如何区分 Gzip 压缩和 Brotli 压缩* I ^( x2 I- ^. x q
网站启用 Brotli 压缩时,服务器请求返回头 Content-Encoding 中会包含 br 字样,否则是 gzip。
2 B/ J ^/ |) e0 `+ _% J; v/ \" w; d5 L5 I9 P
误区2:使用 Fastest 级别的 Brotli 压缩) Z/ e" a- ^( @: w1 E0 B
: X4 I; u2 Z* A9 g- P+ d$ c J! e0 W
如果你阅读并参考了微软官方文档或者其他中文资源,比如:- v$ f2 R. |6 z9 t
ASP.NET Core 中的响应压缩 - MS Doc
! N Y9 W# O' }0 W 在ASP.NET Core中使用brotli压缩 - Cnblogs
# I* o3 U" E7 q0 U) W 那么你可能会在代码中像下面这样使用压缩功能:$ t7 M0 h# O2 l0 T9 V% S9 R
写法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 压缩算法的优势。* b- d4 J, E# H- V
它们的共同点是均使用了 CompressionLevel.Fastest 压缩级别。$ O4 a% A- s% |
而在 CompressionLevel.Fastest 级别时,Brotil 与 Gzip 压缩性能几乎无异。- L. C# ?/ ^6 a Z) Y3 E: B0 k
参考:Introducing Support for Brotli Compression
/ j9 `- k+ [$ X" c% a D R# r# `4 s; y6 o2 |+ w& O! [
- t. |& L( P1 _) \误区3:使用 Optimal 级别的 Brotli 压缩
4 t$ I( m- ^+ k- k: K7 V# U/ A7 P9 T3 J3 i+ S5 I: a
$ c8 m9 d" E, `+ Q, A( {
CompressionLevel 只有三个枚举值:Fastest / NoCompression / Optimal。
) J. Y( l! p2 ~* @+ h 既然 Fastest 级别没有用,那我们只能换成 Optimal 了。# c; Z- `- D, f+ n. n
& e" F3 P$ L; s7 n7 o: P
7 N: d- N5 h2 {+ Z& v最佳实践:使用 4 或 5 级别的 Brotli 压缩( y; a/ `% G. \5 @( K
在 Introducing Support for Brotli Compression 这篇文章中,作者对不同级别 Brotil 的压缩耗时做了评测,也就是下面这幅图。/ n$ B% l7 I% l3 t% C* w) |7 S3 E+ x( S
+ D/ ?9 q8 x* C( b4 X2 o
观察这副图,Brotil 的压缩质量其实有 1~11 个级别。7 v8 S5 [) G. J" S0 g
那我们如何自定义 Brotli 的压缩级别呢,答案是直接将级别对应的整数转成 CompressionLevel 枚举。
" q/ m( u" [, ?& @/ k6 y- U
7 @. R9 z T; A8 _9 r3 O 尽管这种写法看起来十分古怪,但通过考察 .NET 源码,可以确凿这种写法是可行的。( g: ^3 \$ I" m6 H+ S
以上就是ASP.NET Core 文件响应压缩的常见使用误区的详细内容,更多关于ASP.NET Core 文件响应压缩的资料请关注脚本之家其它相关文章!
; L- A {% `; H( [/ h" V6 e- \4 K: d9 A0 r; B0 }$ z
来源:http://www.jb51.net/article/213748.htm {2 [9 N8 d7 P! m, X9 J- V
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|