京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1883|回复: 0

ASP.NET Core 文件响应压缩的常见使用误区

[复制链接]

19

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2021-8-8 05:18:05 | 显示全部楼层 |阅读模式 来自 中国
目录6 J' R7 v) j8 U: i8 M

- W* N% H4 w: T

    9 |; \: j; M/ A, K7 x9 V- \+ r7 r
  • 误区1:未使用 Brotil 压缩7 ]9 o" R# U* p
  • 误区2:使用 Fastest 级别的 Brotli 压缩& F2 y5 q' t# r; k+ `; U& r: Y
  • 误区3:使用 Optimal 级别的 Brotli 压缩3 K8 P' g, z6 e& Y. _) r

: f3 Q8 m  _, ~, w. C误区1:未使用 Brotil 压缩& F5 ]9 v2 I, W& s( @4 t' P

2 b. P" H: `7 h" t+ Y# ^" B
# [9 T/ N  @! D8 W, z  几乎不需要任何额外的代价,Brotil 压缩算法可以帮助你的网站提升约 20% 静态资源加载性能。
# C4 U9 Y2 X/ Y! B" h  同时启用 Gzip / Brotil 压缩
7 |! s0 c& ?0 v* Z5 Y- y  Gzip 有更好的 user-agent 兼容性,而 Brotli 有更好的性能。* f5 N$ y  b4 p* @3 j2 d. ~5 y
  所以我们通常需要在 ASP.NET Core 网站中同时启用这两种压缩。
! i% Q* O6 X- j; ^4 t0 ~  如何区分 Gzip 压缩和 Brotli 压缩  i# q' h" |! P9 O
  网站启用 Brotli 压缩时,服务器请求返回头 Content-Encoding 中会包含 br 字样,否则是 gzip。0 z8 q1 p) l7 B  X  R) ~, J2 I

  ^5 A. o; ], Q1 V! p误区2:使用 Fastest 级别的 Brotli 压缩- V: {; h1 M. |, m9 B9 r! B
! d0 E' n, ~" g& G* R; e- {
0 i9 O/ K" `, ^
  如果你阅读并参考了微软官方文档或者其他中文资源,比如:9 H' k$ V# `7 k6 V2 h
  ASP.NET Core 中的响应压缩 - MS Doc6 |4 [! z9 T+ v% Z
  在ASP.NET Core中使用brotli压缩 - Cnblogs
# O! }$ X3 B6 ?+ S  那么你可能会在代码中像下面这样使用压缩功能:" p$ T( [3 {1 t; D& ~) C
  写法1:使用默认的压缩行为(框架将隐式添加 Brotli 和 Gzip 功能)
  1. public class Startup{    public void ConfigureServices(IServiceCollection services)    {        services.AddResponseCompression();    }    public void Configure(IApplicationBuilder app, IHostingEnvironment env)    {        app.UseResponseCompression();    }}
复制代码
  写法2:显式添加压缩功能
  1. 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
  1. public class BrotliCompressionProvider : ICompressionProvider{    public string EncodingName => "br";    public bool SupportsFlush => true    public Stream CreateStream(Stream outputStream)    {           return new BrotliStream(outputStream,CompressionLevel.Fastest);    }}
复制代码
  不幸的是,以上三种写法都没有发挥出 Brotil 压缩算法的优势。2 \* V0 X7 E/ o$ B2 I+ f6 V. ~
  它们的共同点是均使用了 CompressionLevel.Fastest 压缩级别。
/ B( p9 z1 o$ v  h5 d/ l  而在 CompressionLevel.Fastest 级别时,Brotil 与 Gzip 压缩性能几乎无异。$ n' T7 Y/ \8 u: V1 B. f8 Q
  参考:Introducing Support for Brotli Compression
- I4 W; i0 j2 h5 s- E

4 i- f, G6 I8 y5 _4 Q$ \/ f" F% h9 m+ h% }9 b# Q: H: v
误区3:使用 Optimal 级别的 Brotli 压缩0 y4 ^/ V( S; N: K7 _

9 N1 W. |- \5 B+ ]  f7 s5 f+ z
% R8 j& [0 d5 A( Z. j6 P  CompressionLevel 只有三个枚举值:Fastest / NoCompression / Optimal。
* M; h% r" d& Q7 e4 Y9 f  既然 Fastest 级别没有用,那我们只能换成 Optimal 了。- i8 ~; b/ x7 C0 X: ~

/ o  o1 H0 I0 V3 {1 z
& V) w) o$ s+ s$ c
最佳实践:使用 4 或 5 级别的 Brotli 压缩2 X2 u& \6 @% ?1 z2 J9 g
  在 Introducing Support for Brotli Compression 这篇文章中,作者对不同级别 Brotil 的压缩耗时做了评测,也就是下面这幅图。- C1 ~. W% y/ }% f, f; M
6 t+ C8 V. v% S. d1 T
   观察这副图,Brotil 的压缩质量其实有 1~11 个级别。
6 o# t: y* L& U' _4 f9 i  那我们如何自定义 Brotli 的压缩级别呢,答案是直接将级别对应的整数转成 CompressionLevel 枚举。
! E3 P5 P  Y4 \7 j7 G7 C
2 \7 l: t; `+ i; I8 C# b( G 尽管这种写法看起来十分古怪,但通过考察 .NET 源码,可以确凿这种写法是可行的。: U* l: X1 g# x$ f. ]( N
以上就是ASP.NET Core 文件响应压缩的常见使用误区的详细内容,更多关于ASP.NET Core 文件响应压缩的资料请关注脚本之家其它相关文章!. [4 A1 V$ b- \" Y# F
) }6 a; ^2 I; ?# C; S
来源:http://www.jb51.net/article/213748.htm
" Y* Y+ B/ E1 P) ?# W! M" o+ f  l: x免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-8-29 23:42 , Processed in 0.034693 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表