.NET 中的启用压缩响应来减小带宽压力

在今天的文章中,我将讨论 .NET Core 中的“响应压缩”功能。

首先,我想简单谈谈什么是“响应压缩”。_ 响应压缩 _ 是 .NET Framework 或 .NET Core 中使用的一种技术。此技术通过压缩 Web 应用程序在服务器端发送的数据来减小数据的大小。这样可以减少网络流量,加快数据传输速度并改善用户体验。

此压缩是使用 HTTP 协议执行的。服务器可以使用 Gzip、Deflate 或 Brotli 等算法来压缩数据。浏览器支持这些算法,可以检索压缩数据并将其转换回原始数据。

如何使用?
这个功能的使用其实很简单:

您需要将以下代码添加到 Startup.cs:


builder.Services.AddResponseCompression(options =>  
{  
 options.EnableForHttps = true;  
});app.UseResponseCompression();

压缩提供程序
压缩提供程序通过应用特定的压缩算法来压缩或解压缩数据。例如,GzipCompressionProvider 使用 Gzip 压缩算法压缩和解压缩数据。BrotliCompressionProvider 使用 Brotli 压缩算法。

**BrotliCompressionProvider:**实现 Brotli 压缩算法的提供程序。Brotli 是一种较新的压缩算法,通常提供比 Gzip 或 Deflate 更好的压缩比。BrotliCompressionProvider 使服务器能够使用 Brotli 算法压缩数据,并在浏览器支持 Brotli 压缩的地方对其进行解压缩。

**GzipCompressionProvider:**实现 Gzip 压缩算法的提供程序。Gzip 是 Web 应用程序中常用的压缩算法。GzipCompressionProvider 允许服务器使用 Gzip 算法压缩数据,并在浏览器支持 Gzip 压缩时解压缩数据。


builder.Services.AddResponseCompression(options =>  
{  
 options.EnableForHttps = true;  
 options.Providers.Add();  
 options.Providers.Add();  
});

在此代码块中使用两个不同的压缩提供程序(BrotliCompressionProvider 和 GzipCompressionProvider)是为了支持不同的客户端压缩算法。

客户端可以支持不同的压缩算法。某些客户端可能仅支持 Brotli 压缩,而其他客户端可能仅支持 Gzip 压缩。在这种情况下,您的服务器同时支持 Brotli 和 Gzip 压缩可能很重要。

您可以调整压缩级别以适合您。Brotli 和 Gzip 压缩提供程序默认为最快的压缩级别,这可能无法产生最有效的压缩。要更改这些设置,请执行以下操作:CompressionLevel.Fastest


builder.Services.Configure(options =>  
{  
 options.Level = CompressionLevel.Fastest;  
});  
  
builder.Services.Configure(options =>  
{  
 options.Level = CompressionLevel.SmallestSize;  
});

注意:请务必根据您的需求定制压缩级别,并为您的应用选择最有效的方法。

CompressionLevel.Fastest 压缩应尽快完成,即使生成的输出未以最佳方式压缩。
CompressionLevel.NoCompression 不应执行任何压缩。
CompressionLevel.Optimal Responses 应以最佳方式压缩,即使压缩需要更多时间才能完成。

我们取得了什么成果?
让我们通过一个例子看看这种压缩方法有多大的好处。在这条路径中,我们将得到一直被鄙视的“GetWeatherForecast”API 的帮助,它是 .NET 的示例 API。

首先,让我们修改现成的方法,返回 20000 条数据。


[HttpGet(Name = "GetWeatherForecast")]  
  public IEnumerable Get()  
  {  
   return Enumerable.Range(1, 20000).Select(index => new WeatherForecast  
   {  
    Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),  
    TemperatureC = Random.Shared.Next(\-20, 55),  
    Summary = Summaries\[Random.Shared.Next(Summaries.Length)\]  
   })  
   .ToArray();  
  }

然后检查此方法响应的大小:

.NET 中的启用压缩响应来减小带宽压力

无压缩响应大小

响应大小 1.5 MB

让我们用 和 设置来压缩响应:BrotliCompressinProviderCompressionLevel.SmallestSize

.NET 中的启用压缩响应来减小带宽压力

Brotli 和 SmallestSize 设置

图片

Brotoli 和最快设置

用 GzipCompressinProvider:

Gzip 和 SmallestSize 设置

 

Gzip 和最快设置

因此,平均而言,响应的大小减少了 11 倍(995/91.1=10.922),压缩率达 9%(91.1/995=0.091)。

当然,此功能也有缺点,如果您决定使用它,您应该考虑您的需求和资源,并相应地选择压缩方法和级别。

我们可以提到以下主要缺点:
CPU 负载: 压缩会增加服务器端的 CPU 使用率。压缩和解压缩数据需要时间,并且会消耗服务器资源。对于需要大量数据传输的高流量站点或应用程序,CPU 使用率可能会增加并影响服务器性能。

_ 延迟:_ 压缩和解压缩过程需要时间。服务器压缩数据后,将其发送到浏览器,浏览器对其进行解压缩。由于这些过程需要时间,因此可能会有一些延迟。对于互联网连接缓慢或较差的用户来说,这一点尤其明显。

_ 服务器资源:_ 压缩使用服务器端的资源。特别是当大量客户端同时请求压缩时,服务器资源可能不足。这可能会导致服务器性能降低或响应速度变慢。

_ 浏览器支持:_ 并非所有浏览器都支持压缩数据。特别是,较旧或不完整的浏览器无法解析压缩数据,因此无法正确显示压缩数据。在这种情况下,用户可能会遇到问题或内容格式不正确。

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...