ASP.NET Core ile Sunucu Cevaplarını Sıkıştırın (Response Compression)

16 Aralık 2021 3 dk okuma süresi 36 okunma

Bildiğiniz üzere son kullanıcı her zaman her şeyin hızlı olmasını bekler. Bu nedenle backend tarafında birçok performans artırıcı metodlar kullanırız. Bu methodlardan biriside son kullanıcıya (client) dönen geri dönüş mesajlarının sıkıştırılmasını sağlayan response compression yani sunucu cevaplarının sıkıştırılmasıdır. Bunun asp.net core tarafında 3 farklı yolu var. En çok bilinen Gzip yöntemi, görece daha yeni ve bazı konularda daha iyi sıkıştırma oranları sağlayan Brotli ve custom metod yani kendi yönteminiz.

Gzip ve Brotli Karşılaştırması

Gzip 1992 yılında ortaya çıkmış ve DEFLATE algoritması kullanarak sıkıştırma işlemi yapıyor. Gzip'te 9 farklı sıkıştırma seviyesi vardır. Tüm tarayıcılar tarafından desteklenir.

  • Seviye 1 çok hızlı sıkıştırma yaparak dosya boyutuna çok önem vermez.
  • Seviye 2 ...
  • Seviye 3 ...
  • ...
  • Seviye 9 büyük boyutlu dosyalarınızı yavaş hızda ama en iyi dosya boyutunu sağlayacak şekilde sıkıştırır. Örneğin 10MB'lık bir dosyayı size 5MB olarak verebilir.

Brotli ise 2013 yılında ortaya çıkmış ve aslında 2015'e kadar da http sıkıştırmasına çok önem vermemiş. Modern tarayıcılar tarafından desteklenir. 11 farklı sıkıştırma seviyesi vardır.

Bu seviyeler Gzip'teki ile aynıdır. 1. seviye en hızlı sıkıştırmayı yapar. 11. seviye ise en yavaş sıkıştırma ile en iyi dosya boyutunu hedefler.

Yapılan karşılaştırmalar sonucunda Gzip yaklaşık %78 gibi bir sonuç verirken Brotli %82 gibi daha iyi bir sonuç veriyor. Genelde Akamai tarafından bu karşılaştırmalar yapılmış. Ben de onların sonuçlarını baz alarak buraya yazdım.

Brotli ile; Html sıkıştırmasında %21, JavaScript sıkıştırmasından %14, CSS sıkıştırmasında ise %17'lik daha iyi performanslar sağlanmış fakat burada atlanmaması gerek önemli konu sıkıştırma süreleri. Testler sırasında GZIP bazı seviyelerde çok daha hızlı ve performanslı çalışmışken Brotli'de bazı seviyelerde daha hızlı ve performanslı çalışmış. CPU konusunda ise Brotli sıkıştırma oranında en iyisiyken anlık sıkıştırmada GZIP çok daha hızlı. Bunun yanında yapılan testler sonrası dinamik içeriklerin sıkıştırılmasında da GZIP daha iyi çıkmış.

Şimdi gelelim DotNetCore tarafında GZIP veya Brotli nasıl kullanılıyor kısmına. İşlem çok kolay. Startup.cs'e sadece birkaç satır kod ile uygulamanızda sıkıştırmalar yapabiliyorsunuz.

using Microsoft.AspNetCore.ResponseCompression;

public void ConfigureServices(IServiceCollection services)
{
     services.AddResponseCompression(options =>
     {
         options.Providers.Add<BrotliCompressionProvider>();
         options.Providers.Add<GzipCompressionProvider>();
         // Burada kendi metodunuzu da kullanabilirsiniz
         options.Providers.Add<YourCustomMethod>();
         options.EnableForHttps = true;
         options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[] {
              "text/plain", "text/css", "application/javascript", "text/html", "application/xml", "text/xml", "application/json", "text/json"
         });
     });
     services.Configure<GzipCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);
     services.Configure<BrotliCompressionProviderOptions>(options => options.Level = CompressionLevel.Fastest);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
     app.UseResponseCompression();
}


Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
"The remote certificate is invalid according to the validation procedure" hatası ve çözümü

Multithread uygulamalarda ReaderWriterLockSlim mekanizması ile güvenli dosya yazma işlemleri

Kestrel, Code Modules ve Http.Sys gibi sunucu kavramları ve açıklamaları