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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1997|回复: 0

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

[复制链接]

19

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2021-8-8 05:18:05 | 显示全部楼层 |阅读模式 来自 中国
目录# 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 功能)
  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 压缩算法的优势。
/ 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 @
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-18 03:14 , Processed in 0.037993 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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