„ASP.NET“ branduolio „ASP.NET“ meistriškumo meistriškumo meistriškumo meistriškumo

Šis vadovas siūlo išsamų atsakymo suspaudimą ASP.NET branduolyje. Tai prasideda nuo pagrindinių koncepcijų, tokių kaip tinklo pralaidumas ir tarpinė programinė įranga „ASP.NET Core“. Tada tyrinėjama, koks yra atsako glaudinimas, kada naudoti „Respispons Compression“ tarpinę programinę įrangą, suspaudimo teikėjus, tarpinės programinės įrangos sąranką ir galiausiai atsakymo glaudinimo tarpinės programinės įrangos rezultatus. Iki šio vadovo pabaigos turėsite išsamiai suprasti šią temą.
Pasinerkime!
Tinklo pralaidumas
Pralaidumas reiškia maksimalų duomenų kiekį, kurį galima perduoti per tinklo jungtį, tiek laidą, tiek belaidį, per tam tikrą laiką. Jis matuojamas bitais (b), kilobitais (kb), megabitais (MB) arba gigabitais (GB) per sekundę. Kadangi pralaidumas yra ribotas šaltinis, svarbu jį efektyviai valdyti. Pavyzdžiui, 1 Mbps tinklo pralaidumas reiškia, kad kas sekundę galima perkelti 1 milijoną bitų. Jei siunčiama daugiau duomenų nei tinklas gali tvarkyti, tai gali sukelti spūstis, todėl sumažėja našumas. Todėl mažesnius atsako dydžius galima perduoti greičiau, o tai savo ruožtu padidina bendrą taikymo našumą.
Tarpinė programinė įranga ASP.NET branduolyje
Tarpinės programinės įrangos komponentas pridedamas prie programos vamzdyno, kad būtų galima valdyti gaunamas užklausas ir išeinančius atsakymus. Atsakymo glaudinimo tarpinė programinė įranga buvo prieinama nuo ASP.NET Core 1.1.
Atsakymo glaudinimas
Klientas apima „Priimti kodavimą„Antraštė savo užklausoje, o serveris reaguoja su“Turinio kodavimas„Antraštė, nurodanti, kaip atsakas užkoduotame. Svarbu atkreipti dėmesį, kad papildomo suspaudimo pritaikius jau jau suspaustus failams, pavyzdžiui, CSS ir HTML, gali sukelti didesnius failų dydžius.
Kada naudoti „Response Compression“ tarpinę programinę įrangą:
Serveriai, tokie kaip IIS ir Nginx Ateikite su įmontuota atsako suspaudimo moduliais, tuo tarpu Http.sys ir Kestrelis Serveriai neturi šios funkcijos. Kai programa yra priglobta serveryje, kuriame trūksta integruoto atsakymo suspaudimo, naudojama „Response Compression“ tarpinė programinė įranga. Vis dėlto svarbu atkreipti dėmesį, kad „Response Compression“ tarpinės programinės įrangos našumas yra mažiausiai efektyvus, palyginti su serverio moduliais.
Suspaudimas su HTTPS
Įgalintiforhttps Parinktis valdo glaudinimą, palyginti su saugiais jungtimis. Tai jautri Nusikaltimas ir Pažeidimas Ataka rizika, kada Įgalintiforhttps nustatomas tiesa.
Suspaudimo teikėjai
Yra du turimi kompresijos teikėjai: Brotli ir Gzip. Numatytąjį suspaudimo teikėją nustato kliento palaikomas duomenų formatas. Pvz., Jei klientas palaiko „BROTLI“ suspaustų duomenų formatą, numatytasis glaudinimas bus nustatytas į „BROTLI“. Jei klientas nepalaiko „BROTLI“, bet palaiko GZIP, tada GZIP bus naudojamas kaip numatytasis suspaudimo metodas. Suspaudimo lygį taip pat galima sukonfigūruoti. Brotli yra Numatytasis Suspaudimo teikėjas. „Brotli“ suspaudimo teikėjui galite nustatyti suspaudimo lygį naudodami BrotlicompressionProvideroptions. Panašiai – „GZIP“ kompresijos teikėjui, naudokite „GzipcompressionProvideroptions“. Yra keturi kompresijos lygiai, ir galite pasirinkti tinkamą CompressionLevelenum Remiantis jūsų specifiniais poreikiais, nesvarbu, ar jūs prioritetuojate greitį, ar dydį. Galimi lygiai yra šie:
- Optimalus
- Greičiausias
- Nokompresija
- Mažiausias
Tarpinė programinė įranga
Žemiau pateiktas kodas yra iš „Program.cs“ failo .NET 8 Minimalaus žiniatinklio API projekte. Aiškumo kodekse pridėjau komentarus.
//.net 8 minimal web api //Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// configure the services for response compression
builder.Services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
// when you want to configure a custom compression provider
//options.Providers.Add<CustomCompressionProvider>(); });
//when brotli compression provider is used then the priority is the fastest.
builder.Services.Configure<BrotliCompressionProviderOptions>(options => { options.Level = CompressionLevel.Fastest; });
//when gzip compression provider is used then the priority is the size.
builder.Services.Configure<GzipCompressionProviderOptions>(options => { options.Level = CompressionLevel.SmallestSize; });
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger(); app.UseSwaggerUI();
}
// add the response compression middleware to the request pipeline
// must be called before any middleware that compresses responses
app.UseResponseCompression();
var summaries = new() { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
app.MapGet("/weatherforecast", () => {
var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast
( DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55), summaries(Random.Shared.Next(summaries.Length)) )) .ToArray(); return forecast;
}) .WithName("GetWeatherForecast");
app.Run();
internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
// CustomCompressionProvider.cs
public class CustomCompressionProvider : ICompressionProvider
{
public Stream CreateStream(Stream data) { return data; }
}
Rezultatai ir išvada
Žemiau yra lentelė, kurioje lyginamas suspausto dydis ir laikas, pagrįstas dviem suspaudimo teikėjais (Brotli, GZIP) ir trimis suspaudimo lygiais (greičiausias, mažiausias dydis, optimalus).
Atsakymo suspaudimo tarpinė programinė įranga vaidina lemiamą vaidmenį mažinant pralaidumo reikalavimus ir pagerinant programos reagavimą. Tačiau kartais tai gali turėti neigiamą poveikį, jei pasirinktas suspaudimo teikėjas ar suspaudimo lygis neatitinka jūsų specifinių poreikių. Todėl, norint užtikrinti, kad ji atitiktų jūsų programos reikalavimus, svarbu būti atsargiai, kai naudojate „Response Compression“ tarpinę programinę įrangą.
No Compression
436 B
6 ms
------------------------------------------------------------------------------------------------------------------------------------------------------
Brotli
Fastest
287 B
67 ms
SmallestSize
241 B
43 ms
Optimal
246 B
45 ms
------------------------------------------------------------------------------------------------------------------------------------------------------
Gzip
Fastest
289 B
50 ms
SmallestSize
289 B
50 ms
Optimal
290 B
33 ms
Ekrano kopijos
Užklausos antraštė:
Atsakymo antraštė:
Nokompresijos atsakymo informacija:


