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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2000|回复: 0

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

[复制链接]

19

主题

0

回帖

10

积分

新手上路

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

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-18 05:20 , Processed in 0.039603 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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