|
|
目录
7 A5 }5 u0 V+ x p0 u+ V* f0 ?6 j3 x$ d- n9 V
4 l* Y3 X' K& Q" m
- 误区1:未使用 Brotil 压缩* o0 p4 N E7 ^' i/ p* d
- 误区2:使用 Fastest 级别的 Brotli 压缩' i e0 f/ j4 p. ~8 ]' g$ W+ p+ z
- 误区3:使用 Optimal 级别的 Brotli 压缩5 N. B% q* i+ M. [3 d5 ^
+ `/ G6 X7 t% W9 J( E" r
误区1:未使用 Brotil 压缩
; f4 t$ n6 L) y# n3 P7 P5 }5 z& a& J. j. P9 z6 c, n
- Y* m- ?: Y2 ?8 G5 n) I" Z 几乎不需要任何额外的代价,Brotil 压缩算法可以帮助你的网站提升约 20% 静态资源加载性能。: ?1 t! V$ x0 ~) a& J
同时启用 Gzip / Brotil 压缩6 l9 `) ?7 {% l1 D# N: m
Gzip 有更好的 user-agent 兼容性,而 Brotli 有更好的性能。* I3 u( s; o& l9 R0 ^. f* ~- O
所以我们通常需要在 ASP.NET Core 网站中同时启用这两种压缩。+ X2 r% G$ J2 ?7 Z! @9 W
如何区分 Gzip 压缩和 Brotli 压缩6 R6 S) h$ j4 d/ b+ o
网站启用 Brotli 压缩时,服务器请求返回头 Content-Encoding 中会包含 br 字样,否则是 gzip。
6 H3 f2 o4 `; |1 r+ B
$ S8 }: w1 a7 |4 E误区2:使用 Fastest 级别的 Brotli 压缩
+ ^6 Y* v( k6 }6 G
# v5 D+ w) G$ e
/ ^) x f. M, S& U- j6 a 如果你阅读并参考了微软官方文档或者其他中文资源,比如:
2 l+ n/ M9 @/ v% F! A1 @3 h ASP.NET Core 中的响应压缩 - MS Doc( G( m# X9 F1 t* c# z$ P% t" v
在ASP.NET Core中使用brotli压缩 - Cnblogs
) z+ ?* p5 e6 i& ?, }& e8 T1 ~+ X* N 那么你可能会在代码中像下面这样使用压缩功能:
- c% P7 q" J3 \; s6 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 压缩算法的优势。
: a1 s P+ B$ ?0 v 它们的共同点是均使用了 CompressionLevel.Fastest 压缩级别。
3 D2 t4 U* T- E: E2 T, E 而在 CompressionLevel.Fastest 级别时,Brotil 与 Gzip 压缩性能几乎无异。: k0 g5 c+ K4 j1 }
参考:Introducing Support for Brotli Compression/ n! n2 y3 k. R# j3 @
R. ?/ t: R2 q; e: c6 E8 o$ d9 [8 }& d) [! f& k
误区3:使用 Optimal 级别的 Brotli 压缩
5 u7 }2 Y$ f9 ^
% }& `- F9 [; J! x' q h, Q) v4 B! x2 k) f
CompressionLevel 只有三个枚举值:Fastest / NoCompression / Optimal。' C5 f2 S& |0 @
既然 Fastest 级别没有用,那我们只能换成 Optimal 了。
, ~: f# K/ g; Y8 R. l. v
Y5 O' Y: r } t3 s K: l8 U b2 I, w* ~' A
最佳实践:使用 4 或 5 级别的 Brotli 压缩
9 c5 {- ^5 J1 [( x, k; r P 在 Introducing Support for Brotli Compression 这篇文章中,作者对不同级别 Brotil 的压缩耗时做了评测,也就是下面这幅图。
5 C3 v# [8 Q2 u6 R/ J+ s/ @+ H2 a8 n+ r0 ]) v& Z+ s- K0 Q/ U
观察这副图,Brotil 的压缩质量其实有 1~11 个级别。
# t" X9 j$ U, ?; ~# p 那我们如何自定义 Brotli 的压缩级别呢,答案是直接将级别对应的整数转成 CompressionLevel 枚举。
- g. B% F% ^4 ?3 v/ f Q/ f$ _
6 t% \& |% }6 `; |! D& G% i 尽管这种写法看起来十分古怪,但通过考察 .NET 源码,可以确凿这种写法是可行的。
( g! u8 ]/ H# @% g, }% L以上就是ASP.NET Core 文件响应压缩的常见使用误区的详细内容,更多关于ASP.NET Core 文件响应压缩的资料请关注脚本之家其它相关文章!/ m( V2 A, c/ N2 J+ }1 v% o3 @3 N
- f. O- e: H' D2 ~来源:http://www.jb51.net/article/213748.htm$ I' \( L. l5 p+ S" Y1 G
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|