Ana içeriğe geç

Response Compression ve Content Optimization

Response compression, web uygulamalarında ağ üzerinden iletilen verilerin boyutunu azaltarak performansı artırır. Yanlış yapılandırılmış sıkıştırma yöntemleri kullanıcı deneyimini etkileyebilir ve gereksiz ağ trafiğine yol açabilir.


1. Response Compression Middleware Kullanımını İhmal Etmek

Yanlış Kullanım: Yanıt sıkıştırmasını manuel olarak gerçekleştirmek.

public async Task InvokeAsync(HttpContext context)
{
    var response = context.Response;
    var originalBody = response.Body;

    using var compressedStream = new GZipStream(originalBody, CompressionMode.Compress);
    response.Body = compressedStream;

    await _next(context);
    response.Body = originalBody;
}

İdeal Kullanım: ResponseCompression middleware’ini kullanarak sıkıştırmayı etkinleştirin.

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

app.UseResponseCompression();

2. Hatalı MIME Türü Yapılandırması

Yanlış Kullanım: Sıkıştırılabilir MIME türlerini belirtmemek.

builder.Services.AddResponseCompression();

İdeal Kullanım: Sıkıştırılabilir MIME türlerini açıkça tanımlayın.

builder.Services.AddResponseCompression(options =>
{
    options.MimeTypes = new[]
    {
        "text/plain",
        "text/css",
        "application/javascript",
        "text/html",
        "application/json",
        "image/svg+xml"
    };
});

3. HTTPS Üzerinden Sıkıştırmayı Devre Dışı Bırakmak

Yanlış Kullanım: HTTPS üzerinde sıkıştırmayı devre dışı bırakmak.

builder.Services.AddResponseCompression(options =>
{
    options.EnableForHttps = false;
});

İdeal Kullanım: HTTPS üzerinde sıkıştırmayı etkinleştirin.

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

4. Uygun Sıkıştırma Sağlayıcılarını Kullanamamak

Yanlış Kullanım: Sadece bir sıkıştırma sağlayıcısı kullanmak.

options.Providers.Add<GzipCompressionProvider>();

İdeal Kullanım: Birden fazla sıkıştırma sağlayıcısı ekleyerek kullanıcı cihazlarına uygun seçenekler sunun.

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

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

5. Sıkıştırma Performansını İzlememek

Yanlış Kullanım: Sıkıştırma etkisini ve performansını analiz etmemek.

İdeal Kullanım: Sıkıştırma etkisini ve performansını ölçmek için izleme araçları kullanın.

app.Use(async (context, next) =>
{
    var originalSize = context.Response.Body.Length;
    await next();
    var compressedSize = context.Response.Body.Length;
    Console.WriteLine($"Orijinal Boyut: {originalSize}, Sıkıştırılmış Boyut: {compressedSize}");
});

6. Büyük Dosyalar İçin Sıkıştırmayı Etkinleştirmek

Yanlış Kullanım: Zaten sıkıştırılmış dosyalar için yeniden sıkıştırma uygulamak.

options.MimeTypes = new[] { "application/zip", "image/png" };

İdeal Kullanım: Zaten sıkıştırılmış dosyaları sıkıştırma sürecinden hariç tutun.

builder.Services.AddResponseCompression(options =>
{
    options.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(new[]
    {
        "text/plain",
        "text/css",
        "application/javascript",
        "application/json",
        "image/svg+xml"
    });
});