.NET 8/9中的响应压缩,减少带宽压力

科技   2024-11-12 08:01   广东  

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

首先,我们简要了解什么是响应压缩。响应压缩是 .NET Framework 或 .NET Core 中使用的一种技术,它通过压缩来减小服务器发送的数据大小,从而减少网络流量、加速数据传输并改善用户体验。这种压缩是使用 HTTP 协议执行的,服务器可以使用 Gzip、Deflate 或 Brotli 等算法来压缩数据,而浏览器支持这些算法,并且可以将压缩数据解压缩回其原始形式。

如何使用?

此功能的使用非常简单:您需要将以下代码添加到文件中。Startup.cs

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

压缩提供程序

压缩提供程序使用特定的压缩算法压缩或解压缩数据。例如,使用 Gzip 压缩算法,而使用 Brotli 压缩算法。GzipCompressionProviderBrotliCompressionProvider

  • BrotliCompressionProvider 的实现 Brotli 压缩算法的提供程序。Brotli 是一种较新的压缩算法,通常提供比 Gzip 或 Deflate 更好的压缩率。它使服务器能够使用 Brotli 算法压缩数据,并在支持 Brotli 压缩的浏览器中解压缩数据。

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

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

使用两个不同的压缩提供程序 ( 和 ) 是为了支持不同的客户端压缩算法。客户端可能支持不同的压缩算法,因此服务器必须同时支持 Brotli 和 Gzip 压缩。BrotliCompressionProviderGzipCompressionProvider

调整压缩级别

您可以根据需要调整压缩级别。Brotli 和 Gzip 压缩提供程序默认使用最快的压缩级别,这可能不会产生最有效的压缩。要更改这些设置,请执行以下操作:

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

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

请注意,您应该根据需要自定义压缩级别,并为您的应用程序选择最有效的方法。

  • CompressionLevel.Fastest应尽快完成压缩,即使生成的输出未得到最佳压缩。

  • CompressionLevel.NoCompression不应执行任何压缩。

  • CompressionLevel.Optimal应该以最佳方式压缩数据,即使压缩需要更多时间才能完成。

我们取得了什么成就?

让我们通过一个例子来看看我们可以从这种压缩方法中获得多少好处。我们将使用“GetWeatherForecast”API,它是 .NET 中的示例 API。首先,我们修改现有方法,返回 20000 条数据。

[HttpGet(Name = "GetWeatherForecast")]  
public IEnumerable<WeatherForecast> Get()
{
// Method implementation...
}

然后,我们检查响应大小:

  • 无压缩:1.5 MB

  • 使用 Brotli 和设置CompressionLevel.SmallestSize

  • 使用 Brotli 和最快设置

  • 使用 Gzip 并设置CompressionLevel.SmallestSize

  • 使用 Gzip 和最快的设置

平均而言,响应量减少了 10 倍。

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

我们可以提到以下主要缺点:

  • CPU 负载: 压缩会增加服务器端的 CPU 使用率,这可能会影响高流量站点或应用程序的服务器性能。

  • 延迟: 压缩和解压缩过程需要时间,这可能会导致一些延迟,尤其是对于 Internet 连接速度较慢的用户。

  • 服务器资源: 压缩使用服务器端资源,尤其是当多个客户端同时请求压缩时,这可能会耗尽服务器资源。

  • 浏览器支持: 并非所有浏览器都支持压缩数据,较旧或不完整的浏览器可能无法解压缩数据。


推荐阅读:
.NET无侵入式对象池解决方案
相约 .NET 9!|共同关注 .NET Conf 2024 最新发布
在 .NET 中编写更好的配置文件
.NET Conf China 2024(智能 创新 开放)-- 启动智能时代新引擎
基于.NET8 + Vue/UniApp前后端分离的快速开发框架,开箱即用!
Avalonia开源控件库强力推荐-Semi.Avalonia

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2024开发者路线
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终回顾
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。

DotNet NB
.NET 技术学习分享,社区热点分享,专注为 .NET 社区做贡献,愿我们互相交流学习,共同推动社区发展
 最新文章