ASP.NET Core如何使用压缩中间件提高Web应用程序性能

llovebo

共 4077字,需浏览 9分钟

 ·

2022-01-14 09:29

前言

压缩可以大大的降低我们Web服务器的响应速度,压缩从而提高我们网页的加载速度,以及节省一定的带宽.

何时使用相应压缩中间件

在IIS,Apache,Nginx中使用基于服务端的响应压缩技术。中间件的执行可能和服务端模块不匹配。HTTP.sys 和Kestrel server目前没有提供内置的压缩支持。

什么时候使用Response Compression Middleware:
  • 无法使用以下基于服务器的压缩技术时:

  1. IIS 动态压缩模块

  2. apache的GZIP压缩

  3. Nginx 压缩

  • 直接托管:

  1. Http.sys 服务器

  2. Kestrel 服务器

如何添加MIME

中间件为压缩指定了一组默认的 MIME 类型:

  • application/javascript

  • application/json

  • application/xml

  • text/css

  • text/html

  • text/json

  • text/plain

  • text/xml

Copy
       public void ConfigureServices(IServiceCollection services)        {            services.AddResponseCompression();            services.AddRazorPages();        }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseResponseCompression(); app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); }

默认是采用Brotli压缩

Brotli is a generic-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling, with a compression ratio comparable to the best currently available general-purpose compression methods. It is similar in speed with deflate but offers more dense compression.

Brotli 是基于LZ77算法的一个现代变体、霍夫曼编码和二阶上下文建模。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。

与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。

摘自:https://segmentfault.com/a/1190000009383543

  • MimeTypes:设定要进行压缩的MimeTypes

  • GzipCompressionProviderOptions:设置压缩方式(默认是CompressionLevel.Fastest快速压缩)

压缩前:

5d03a18ca83a193aeb40d218f0961249.webp

压缩后:

c11b5e1faf0779fa02b949234a1afd96.webp

使用压缩的好处就是节省网络流量,压缩资源文件。但是消耗一点CPU性能.

gzip

  • 默认情况下, Brotli 压缩提供程序会随Gzip 压缩提供程序一起添加到压缩提供程序的数组中。

  • 他默认采用的是Brotli压缩,如果客户端不支持Brotli,客户端支持Gzip,则默认为Gzip.

Copy
   public void ConfigureServices(IServiceCollection services)        {           services.AddResponseCompression(options=> {               options.Providers.Add();               options.Providers.Add();
}); services.AddRazorPages(); }

有些MIME类型是需要我们自己为他将其加入压缩类型中的,我们可以从图中看到目前有一些未被压缩,那么我们可以将他手动增加一下类型.

Copy
  public void ConfigureServices(IServiceCollection services)        {           services.AddResponseCompression(options=> {               options.Providers.Add();               options.Providers.Add();
options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat( new[] { "image/x-icon" });
}); services.AddRazorPages(); }

如何配置压缩级别

压缩级别描述
CompressionLevel.Fastest压缩应该尽快完成, 即使生成的输出未以最佳方式压缩。
CompressionLevel.NoCompression不应执行压缩。
CompressionLevel.Optimal即使压缩需要更长的时间, 也应以最佳方式压缩响应。
Copy

public void ConfigureServices(IServiceCollection services){        services.AddResponseCompression();            services.Configure(options =>                 {                        options.Level = CompressionLevel.Fastest;                            });                            })}

安全协议压缩

可以使用EnableForHttps选项控制安全连接上的压缩响应,该选项默认情况下处于禁用状态。对动态生成的页面使用压缩可能会导致安全问题,例如CRIME和BREACH攻击。

  • EnableForHttps:是否对HTTPS封包进行压缩(默认是false)

Copy
        public void ConfigureServices(IServiceCollection services)        {           services.AddResponseCompression(options=> {               options.Providers.Add();               options.Providers.Add();               options.EnableForHttps = true;               options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(                new[] { "image/x-icon" });
}); services.AddRazorPages(); }

来源:https://www.cnblogs.com/yyfh/p/11796421.html


版权申明:本文来源于网友收集或网友投稿,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。


支持小微:

腾讯云 双十二活动!玩服务器的可以搞搞,老客户也可以参加!

轻量服务器  2核4G8M80G 222元/3年  

爆款1核2G云服务器首年38元  

链接:https://curl.qcloud.com/bR8ycXZa


右下角,您点一下在看图片41d61837af9db2f08cd5b38ed0dc146c.webp

小微工资涨1毛

商务合作QQ:185601686




浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报