Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Sunucu tarafında Brotli sıkıştırmasını zorunlu kılarak HTML transfer boyutunu nasıl yarıya indirdim

✖ Kapat
Duyuru
✖ Kapat
Duyuru

asteron

Üye
Katılım
14 Mart 2026
Mesajlar
59
Merhaba arkadaşlar, bugün sizlere basit gibi görünen ama performansa inanılmaz etki eden bir konudan, Brotli sıkıştırmasından bahsedeceğim. Bir projede, özellikle de zengin içerikli sayfaların (listing, blog detay gibi) HTML'lerinin boyutu beni çok rahatsız ediyordu. Network sekmesine baktığımda 80-90KB'lık HTML'ler görüyordum ve "Bu kadar basit bir sayfa için bu boyut çok fazla" diye düşünüyordum. İşte o zaman Brotli'nin gücünü zorunlu kılmaya karar verdim.

🔥 Sorunun Kökeni: Gzip Yetersiz Kalıyordu

Nginx sunucumda varsayılan olarak gzip açıktı ve her şey "sıkıştırılıyor" gibiydi. Ancak biraz araştırınca gördüm ki, modern tarayıcıların neredeyse tamamı Brotli (br) sıkıştırmasını destekliyor ve bu algoritma, özellikle tekrarlanan metinlerde (HTML, CSS, JS) gzip'e göre %15-20 daha iyi sıkıştırma sağlıyor. Sorun şuydu: Sunucu yapılandırmam, eğer tarayıcı hem gzip hem br destekliyorsa, varsayılan olarak gzip'i gönderiyordu. Yani potansiyelin farkında değildik!

🔧 Çözüm: Nginx'de Brotli'yi Zorunlu Hale Getirmek

İlk adım, Nginx'in Brotli modülünün yüklü olduğundan emin olmaktı (`nginx -V` komutu ile kontrol edebilirsiniz). Ardından, site konfigürasyon dosyama (genelde `sites-available` içinde) aşağıdaki direktifleri ekledim. Amacım, text/html MIME tipi için Brotli'yi önceliklendirmek ve destekleniyorsa kesinlikle onu kullanmaktı.

NGINX:
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types text/plain text/css text/xml application/javascript application/x-javascript application/xml application/xml+rss application/json application/ld+json image/svg+xml text/html;

# Gzip'i de açık tutuyoruz, Brotli desteklemeyen eski istemciler için
gzip on;
gzip_vary on;

# ÖNEMLİ: Eğer istemci Brotli'yi destekliyorsa, Gzip yerine Brotli kullan.
map $http_accept_encoding $compression_type {
    default gzip;
    "~br" br;
}

# Bu map'i server bloğunuzda kullanabilirsiniz.
# Ana server veya location bloğunuzda aşağıdaki gibi bir kontrol ekleyebilirsiniz:
# add_header Vary Accept-Encoding;
# Bu header, önbellekleme için önemli.

Ancak benim asıl istediğim, HTML içeriği için Brotli'yi şart koşmaktı. Bunun için, HTML dosyalarını servis eden özel bir `location` bloğu oluşturdum.

📉 Sonuçlar ve Performans Artışı

Yapılandırmayı kaydedip Nginx'i yeniden başlattıktan sonra, geliştirici konsolunun Network sekmesini açtığımda gördüğüm manzara beni çok mutlu etti. Daha önce 92KB olan bir HTML yanıtı, artık 43KB olarak geliyordu! Bu, neredeyse %50'den fazla bir küçülme demekti. "Content-Encoding" başlığında gzip yerine br yazdığını görmek ise ayrı bir keyifti.

Bu küçülme, özellikle mobil kullanıcılar ve düşük bant genişliğine sahip bölgeler için sayfa yükleme sürelerinde gözle görülür bir iyileşme sağladı. Lighthouse skorlarımda "Performans" alanında hemen bir artış gözlemledim.

💭 Siz Ne Düşünüyorsunuz?

Bu yapılandırma, benim senaryomda harika çalıştı. Siz sunucu tarafında sıkıştırma için hangi yöntemleri kullanıyorsunuz? Cloudflare veya benzeri bir CDN kullanıyorsanız, Brotli ayarlarını doğrudan oradan da yönetebilirsiniz, bu konuda tecrübeleriniz var mı? Ya da farklı bir web sunucusu (Apache, Caddy) kullanıyorsanız, orada Brotli'yi nasıl zorunlu kıldınız? Yorumlarda deneyimlerinizi paylaşın, tartışalım!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri