Web uygulamalarının hızı ve performansı, modern kullanıcı deneyimi açısından kritik bir rol oynar. Hızlı yüklenmeyen sayfalar, kullanıcı kaybına ve daha düşük arama motoru sıralamalarına neden olabilir. Bu yazıda, Django projelerinde metin sıkıştırma kullanılarak performansı nasıl optimize edebileceğinizi adım adım anlatıyoruz.

Neden Metin Sıkıştırma Gerekli?

Statik dosyalar (örneğin CSS ve JavaScript) ve dinamik içeriklerin optimize edilmeden sunulması, ağ üzerinden daha fazla veri aktarılmasına neden olur. Bu da:

  • Daha uzun yüklenme süreleri,
  • Kullanıcı deneyiminde bozulma,
  • Daha yüksek bant genişliği maliyetleri,
  • Arama motoru performansının olumsuz etkilenmesi gibi sorunlar doğurur.

Metin sıkıştırma algoritmaları (Brotli, Gzip vb.), dosyaları daha küçük boyutlara sıkıştırarak bu sorunları azaltır. Özellikle Brotli, Gzip'e göre daha etkili bir algoritmadır ve modern tarayıcılarda desteklenir.


Django Projelerinde Sıkıştırma Nasıl Uygulanır?

1. Django GZip Middleware’ini Etkinleştirin

Django, dinamik içeriklerin sıkıştırılması için dahili bir middleware olan GZipMiddleware sunar. Bu middleware, tarayıcının desteklediği sıkıştırma yöntemlerini otomatik olarak uygular.

Kontrol Edilmesi Gerekenler:

settings.py dosyanızda aşağıdaki middleware’in mevcut olduğundan emin olun:

MIDDLEWARE = [
    ...
    'django.middleware.gzip.GZipMiddleware',  # Dinamik içerik sıkıştırma
    ...
]

Bu ayar, dinamik içeriğinizin gzip sıkıştırma kullanılarak sunulmasını sağlar.


2. Brotli Algoritmasını Projeye Dahil Etmeden Önce Kontrol Edin

Brotli, daha yüksek sıkıştırma oranı sağlayan modern bir algoritmadır. Ancak kurulumdan önce, sisteminizde yüklü olup olmadığını kontrol etmek önemlidir.

Mevcut Durumu Kontrol Etme:

pip list | grep Brotli

Eğer bir sonuç alamıyorsanız, Brotli henüz yüklenmemiştir.

Kurulum:

Sanal ortamınızı aktive edin ve Brotli'yi yükleyin:

source /home/www-data/proje_klasoru/venv/bin/activate
pip install Brotli

Not: Sanal ortam, projenizin bağımlılıklarının izole edilmesi için kullanılır.


3. Statik Dosyaların Durumunu Kontrol Edin

Statik dosyalarınızın en son ne zaman güncellendiğini kontrol etmek, sıkıştırma ve optimizasyon adımlarından önce önemlidir. Bu bilgi, hangi dosyaların yeniden işlenmesi gerektiğini anlamaya yardımcı olur.

ls -l staticfiles/ | head -n 5

Elde edilen çıktı, statik dosyalarınızın son değişiklik tarihlerini gösterecektir.


4. WhiteNoise Yapılandırması

WhiteNoise, Django’nun statik dosyalarını optimize etmek ve sıkıştırılmış hâlde sunmak için kullanılan bir middleware'dir. Brotli ve Gzip desteğini etkinleştirmek için settings.py dosyanızda aşağıdaki ayarları ekleyin:

# WhiteNoise Yapılandırması
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
WHITENOISE_COMPRESSION_ENABLED = True
WHITENOISE_BROTLI_ENABLED = True  # Brotli sıkıştırma
WHITENOISE_GZIP_ENABLED = True    # Gzip sıkıştırma
WHITENOISE_USE_FINDERS = True

Bu Ayarlar Ne Yapar? - STATICFILES_STORAGE: Statik dosyaları sıkıştırır ve tarayıcı önbelleğine uygun hale getirir. - WHITENOISE_COMPRESSION_ENABLED: Sıkıştırmayı genel olarak etkinleştirir. - WHITENOISE_BROTLI_ENABLED: Brotli algoritmasını etkinleştirir. Bu, tarayıcılarda daha iyi sıkıştırma oranı sağlar. - WHITENOISE_GZIP_ENABLED: Gzip sıkıştırmasını etkinleştirir. Brotli desteklemeyen tarayıcılar için alternatif sunar. - WHITENOISE_USE_FINDERS: Django'nun statik dosya bulma sistemini etkinleştirir.


5. Nginx Konfigürasyonunu Bulma ve Ayarlama

Web sunucusu olarak Nginx kullanıyorsanız, gzip ve Brotli sıkıştırmayı etkinleştirerek daha fazla optimizasyon yapabilirsiniz.

Nginx Konfigürasyon Dosyasını Bulma:

ls -l /etc/nginx/sites-enabled/

Bulunan konfigürasyon dosyasına erişerek düzenlemeye başlayabilirsiniz:

sudo nano /etc/nginx/sites-available/mehmetyerli.com

Nginx Konfigürasyon Ayarları:

## Gzip Ayarları
gzip on;  # Gzip sıkıştırmayı aktif eder
gzip_vary on;  # Vary: Accept-Encoding header'ını ekler
gzip_proxied any;  # Proxy'den gelen istekleri de sıkıştırır
gzip_comp_level 6;  # Sıkıştırma seviyesi (1-9 aralığında, 6 dengelidir)
gzip_buffers 16 8k;  # Sıkıştırma için buffer boyutu
gzip_http_version 1.1;  # HTTP 1.1 ve üstü için sıkıştırma uygular
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/x-font-ttf font/opentype image/svg+xml image/x-icon;  # Sıkıştırılacak dosya türleri

Ayarların Anlamı: - gzip on: Gzip sıkıştırmayı etkinleştirir. - gzip_vary on: "Accept-Encoding" header'ı ekleyerek tarayıcının sıkıştırma destek bilgisi göstermesini sağlar. - gzip_proxied any: Proxy sunucularından gelen isteklerin de sıkıştırılmasına izin verir. - gzip_comp_level: Sıkıştırma kalitesi ve performans dengesini ayarlar. 6, çoğu durum için idealdir. - gzip_buffers: Sıkıştırma tampon boyutunu ayarlar. - gzip_http_version: Sıkıştırma desteği için minimum HTTP versiyonunu belirtir. - gzip_types: Hangi dosya türlerinin sıkıştırılacağını tanımlar.

Nginx'i Yeniden Başlatma:

Konfigürasyonu düzenledikten sonra Nginx'i test edin ve yeniden başlatın:

sudo nginx -t
sudo systemctl restart nginx

6. Statik Dosyaları Yeniden Toplama

WhiteNoise, statik dosyalarınızı sıkıştırılmış versiyonlarla yeniden oluşturur. Bu işlem için aşağıdaki komutları kullanın:

python manage.py collectstatic --noinput

Bu komut, sıkıştırılmış CSS ve JS dosyalarını oluşturur.


7. Gunicorn Yeniden Başlatma

Django projenizdeki değişikliklerin uygulanabilmesi için Gunicorn'un yeniden başlatılması gerekir:

sudo systemctl restart gunicorn

Sıkıştırmanın Aktif Olduğunu Kontrol Etme

1. Tarayıcı Geliştirici Araçları: - Chrome’da F12 tuşuna basarak geliştirici araçlarını açın. - "Network" sekmesine gidin ve bir statik dosyayı seçin. - "Headers" bölümünde "Content-Encoding: gzip" veya "Content-Encoding: br" başlığını kontrol edin.

2. Curl Komutu ile Kontrol:

curl -I -H "Accept-Encoding: gzip, deflate, br" https://mehmetyerli.com/static/pages/css/home.css

Bu komut, sunucunun sıkıştırma yanıtını doğrulamanıza yardımcı olur. Yanıtınızda "Content-Encoding: gzip" veya "Content-Encoding: br" yazıyor olmalıdır.


Sonuç

Bu adımları izleyerek Django projenizde hem statik hem de dinamik içeriği sıkıştırarak:

  • Daha hızlı bir yüklenme süreci sunabilir,
  • Kullanıcı deneyimini iyileştirebilir,
  • Daha düşük bant genişliği kullanımı sağlayabilir ve
  • Arama motoru sıralamalarınızı artırabilirsiniz.

Bu optimizasyonları düzenli olarak kontrol etmek ve gerektiğinde iyileştirme yapmak web uygulamanızın başarısı için kritik bir öneme sahiptir.

Design a detailed branch with clusters of fruits, such as pomegranates or berries, intertwined with flowing leaves. The design should have rounded and smooth curves, with no sharp endings, and be densely packed with black lines against a white background.