|
|
目录
/ C2 L" F7 ^# I* @$ F! B5 c! m1 T
2 ]9 _2 j4 H5 V6 |1 |0 d- z, {8 p2 k+ ?( {! M5 v9 |+ L
- 误区1:未使用 Brotil 压缩
$ X' C" _4 l2 B0 R, A! b" J - 误区2:使用 Fastest 级别的 Brotli 压缩; g- E* U9 R0 Q) @4 z$ C
- 误区3:使用 Optimal 级别的 Brotli 压缩
( {- ~- G/ w9 ~3 K: b4 u X& |# F& S% K8 O& D$ g8 h3 W" q
误区1:未使用 Brotil 压缩
" @; Y( G( {7 e- d$ Z5 q
) i: C2 J% \5 q8 Z0 E: B& @
8 Q& M7 |+ J% q1 U& u- L; D 几乎不需要任何额外的代价,Brotil 压缩算法可以帮助你的网站提升约 20% 静态资源加载性能。
, Z% Y' Y0 W1 F$ Z5 `+ ] 同时启用 Gzip / Brotil 压缩4 ^4 F! y s7 c9 I' q8 z
Gzip 有更好的 user-agent 兼容性,而 Brotli 有更好的性能。6 C" o4 ]: X$ j7 i( a. R2 w
所以我们通常需要在 ASP.NET Core 网站中同时启用这两种压缩。
1 [0 _4 n* \) J a 如何区分 Gzip 压缩和 Brotli 压缩
) `5 ?; i, y/ T3 A 网站启用 Brotli 压缩时,服务器请求返回头 Content-Encoding 中会包含 br 字样,否则是 gzip。
+ i J; D- i' W7 R4 y2 w1 u( E
G7 o) H! o1 T. L) J' \误区2:使用 Fastest 级别的 Brotli 压缩
% p$ @& `2 j% m" n, s, w% b* O8 f. A% I/ I' P; \ E, a7 S
/ t8 t. X, X/ ^- d6 U, M
如果你阅读并参考了微软官方文档或者其他中文资源,比如:
# l0 g& \: \1 X1 k8 l ASP.NET Core 中的响应压缩 - MS Doc
7 o: w( M8 L9 J) E: E9 E 在ASP.NET Core中使用brotli压缩 - Cnblogs
- ^6 D/ @7 o! `0 a( I) I8 A 那么你可能会在代码中像下面这样使用压缩功能:
& w$ r9 u7 d9 d _0 W5 l 写法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 压缩算法的优势。
5 ]: ^- b% i9 B) p8 D 它们的共同点是均使用了 CompressionLevel.Fastest 压缩级别。
9 ^8 H) S/ s! H6 q; ^0 T 而在 CompressionLevel.Fastest 级别时,Brotil 与 Gzip 压缩性能几乎无异。
; r$ B. Q1 _* |/ W 参考:Introducing Support for Brotli Compression
& r( j) A. J+ I3 V. C4 j8 D" Q& j7 }; a! G7 _8 }
* O) ^$ p1 `* C4 N3 n2 t6 W6 P误区3:使用 Optimal 级别的 Brotli 压缩
- S2 s7 ]. {! z, q! _0 o
* j* k8 O6 Z( ^& P) }/ D# v: o8 I; V* V e" b, p
CompressionLevel 只有三个枚举值:Fastest / NoCompression / Optimal。- H2 u" }+ t& [. Q; A* |5 `) P
既然 Fastest 级别没有用,那我们只能换成 Optimal 了。
9 n: x# S+ ?1 a; A. f/ g( w. k! ^: `4 d, X
; d: G+ s N+ j& ?* c3 D
最佳实践:使用 4 或 5 级别的 Brotli 压缩
/ g% s, L8 K- l1 F& M 在 Introducing Support for Brotli Compression 这篇文章中,作者对不同级别 Brotil 的压缩耗时做了评测,也就是下面这幅图。
( o; }1 N. Y& m3 `$ i8 B
: r1 N9 V% b+ Y0 U 观察这副图,Brotil 的压缩质量其实有 1~11 个级别。9 S/ x M0 K9 v1 R- m
那我们如何自定义 Brotli 的压缩级别呢,答案是直接将级别对应的整数转成 CompressionLevel 枚举。
# \$ B# G. |( B' ]$ d 3 F% v& d9 V" K; T) E' w
尽管这种写法看起来十分古怪,但通过考察 .NET 源码,可以确凿这种写法是可行的。
* j- c u# g" D U以上就是ASP.NET Core 文件响应压缩的常见使用误区的详细内容,更多关于ASP.NET Core 文件响应压缩的资料请关注脚本之家其它相关文章!
$ Q2 k/ {9 q5 ^1 D5 C8 F1 P$ X, v! j6 H: a9 V+ y" v/ k# c$ A
来源:http://www.jb51.net/article/213748.htm
+ `8 j8 N( n! F1 _免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|