Hosting & Sunucu

Sunucu yanıt süresini (TTFB) azaltma — pratik kılavuz

TTFB’yi düşürerek sitenizin hızını artırın. Yüksek TTFB’nin yaygın nedenlerini, doğru ölçüm yöntemlerini ve önbellekleme, veritabanı ile PHP için pratik çözümleri öğrenin.

Hosting & Sunucu

TTFB Düşürme Nedir ve Neden Önemlidir?

İlk Bayta Kadar Geçen Süre (Time to First Byte) veya TTFB, sunucu performansının en önemli ölçütlerinden biridir. TTFB, tarayıcının istek göndermesinden sunucudan ilk bayt yanıtının alınmasına kadar geçen süreyi ölçer. Bu sayı ne kadar düşükse, kullanıcılar sitenizin içeriğini o kadar hızlı görür. TTFB’yi düşürmek, kullanıcı deneyimi ve arama motoru sıralamaları üzerinde doğrudan bir etkiye sahiptir.

Yüksek TTFB genellikle üç ana faktörden kaynaklanır: yanlış sunucu yapılandırması, yavaş veritabanı veya önbellek kullanılmaması. Bu makalede, bu faktörlerin her birini inceleyecek ve bunları çözmek için pratik çözümler sunacağız.

TTFB’yi Doğru Ölçme

Herhangi bir işlem yapmadan önce TTFB’yi doğru bir şekilde ölçmelisiniz. Bunun için çeşitli araçlar mevcuttur:

  • Çevrimiçi Araçlar: GTmetrix, Pingdom Tools ve WebPageTest
  • Komut Satırı Aracı: Linux’ta curl komutu
  • Tarayıcı Araçları: Chrome DevTools (Network bölümü)

curl ile doğru ölçüm için aşağıdaki komutu kullanın:

curl -o /dev/null -s -w "time_namelookup: %{time_namelookup}\ntime_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{total}\n" https://example.com

Bu komutun çıktısı, yanıt süresinin farklı bölümlerini içerir. time_starttransfer değeri sizin TTFB’nizdir. Normal siteler için iyi bir TTFB 200 milisaniyenin altı, ağır siteler için ise 500 milisaniyenin altıdır.

Yaygın Hata: Yanlış Yerden Ölçüm

Birçok kişi TTFB’yi yalnızca tek bir coğrafi konumdan ölçer. Sunucunuz İran’daysa ve kullanıcılarınız yurt dışından sitenize erişiyorsa, onların TTFB’si çok daha yüksek olacaktır. Her zaman birden fazla konumdan test edin.

TTFB’yi Düşürmek İçin PHP Optimizasyonu

PHP, en yaygın sunucu tarafı programlama dillerinden biridir ve yanlış yapılandırma TTFB’yi önemli ölçüde artırabilir.

PHP-FPM Ayarları

PHP-FPM kullanıyorsanız, php-fpm.conf veya www.conf dosyasındaki aşağıdaki ayarları kontrol edin:

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

Yukarıdaki değerleri sunucu kaynaklarınıza göre ayarlayın. pm.max_children çok düşükse, istekler kuyrukta bekler ve TTFB artar. Uygun değeri hesaplamak için:

  1. PHP için mevcut RAM miktarını belirleyin (örneğin 2 GB)
  2. ps aux | grep php komutuyla her bir PHP işleminin ortalama RAM kullanımını bulun (genellikle 30-50 MB)
  3. İzin verilen sayı = Mevcut RAM / İşlem başına kullanım

OPcache’i Etkinleştirin

OPcache, derlenmiş PHP kodunu bellekte saklar ve her istekte yeniden derlemeyi önler. Etkinleştirmek için php.ini dosyasına aşağıdaki satırları ekleyin:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60

Değişiklikleri uyguladıktan sonra PHP-FPM hizmetini yeniden başlatın:

sudo systemctl restart php8.1-fpm

TTFB’yi Düşürmek İçin Veritabanı Optimizasyonu

Yavaş bir veritabanı, yüksek TTFB’nin ana nedenlerinden biridir. Siteniz MySQL veya MariaDB kullanıyorsa aşağıdaki adımları izleyin.

Yavaş Sorguları Belirleme

Hangi sorguların uzun sürdüğünü görmek için yavaş sorgu günlüğünü etkinleştirin:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-queries.log';

Ardından günlük dosyasını inceleyin:

sudo tail -f /var/log/mysql/slow-queries.log

Doğru İndeksleme

Büyük tablolar için indeksleme gereklidir. Örnek: 500.000 kayıtlı bir orders tablonuz olduğunu ve sık sık user_id’ye göre arama yaptığınızı varsayalım:

CREATE INDEX idx_user_id ON orders(user_id);

Mevcut indeksleri kontrol etmek için aşağıdaki komutu kullanın:

SHOW INDEX FROM orders;

MySQL Ayarları

my.cnf dosyasını düzenleyin. 4 GB RAM’e sahip bir sunucu için aşağıdaki ayarlar uygundur:

[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 512M
query_cache_type = 1
query_cache_size = 128M
max_connections = 150

Önemli Not: innodb_buffer_pool_size toplam RAM’in yaklaşık %50-70’i olmalıdır. Çok düşükse, veritabanı sürekli diskten okumak zorunda kalır ve bu da TTFB’yi artırır.

TTFB’yi Düşürmek İçin Önbellekleme

Önbellekleme, TTFB’yi düşürmenin en etkili yöntemlerinden biridir. Önbellekleme ile hazır yanıtları saklar ve yeniden işlemeyi önlersiniz.

Tarayıcı Önbelleği

HTTP başlıklarını ayarlayarak tarayıcıyı statik dosyaları önbelleğe almaya zorlayabilirsiniz. .htaccess dosyasında (Apache için) veya Nginx ayarlarında:

# Apache
<FilesMatch "\.(css|js|jpg|png|gif)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
# Nginx
location ~* \.(css|js|jpg|png|gif)$ {
    expires 30d;
    add_header Cache-Control "public, immutable";
}

Redis veya Memcached ile Sunucu Tarafı Önbelleği

Dinamik siteler için nesne önbelleği kullanmak oldukça etkilidir. WordPress, Redis Object Cache gibi eklentilerle bu özelliği kolayca kullanır. Redis kurulumu:

sudo apt install redis-server php8.1-redis
sudo systemctl enable redis
sudo systemctl start redis

Ardından WordPress ayarlarında Redis Object Cache eklentisini etkinleştirin. Bu, TTFB’yi %50’ye kadar düşürebilir.

Tam Sayfa Önbelleği (Full Page Cache)

WordPress siteleri için WP Rocket veya W3 Total Cache gibi eklentiler tam sayfa önbelleği sunar. Bu eklentiler, hazır HTML sürümlerini saklar ve PHP veya veritabanına ihtiyaç duymadan kullanıcılara sunar.

DNS ve Ağ Optimizasyonu

TTFB yalnızca web sunucusuyla sınırlı değildir. DNS süresi de TTFB’nin bir parçasıdır.

Hızlı DNS Kullanımı

Cloudflare DNS (1.1.1.1) veya Google DNS (8.8.8.8) gibi hızlı DNS hizmetlerini kullanın. ServerNet’in kendi DNS hizmetini kullanıyorsanız, A ve CNAME kayıtlarının doğru ayarlandığından emin olun.

HTTP/2 veya HTTP/3’ü Etkinleştirme

HTTP/2 ve HTTP/3, bağlantı sayısını azaltarak ve istekleri çoğullayarak TTFB’yi iyileştirir. Nginx’te etkinleştirmek için:

server {
    listen 443 ssl http2;
    # SSL ayarları
}

TTFB Düşürmede Yaygın Hatalar

İşte kaçınmanız gereken birkaç yaygın hata:

  • Yalnızca Bir Faktöre Odaklanmak: TTFB’yi düşürmek kapsamlı bir yaklaşım gerektirir. Yalnızca önbelleği etkinleştirir ancak veritabanı yavaşsa, istenen sonucu alamazsınız.
  • Aşırı Önbellek Kullanımı: Her şeyi önbelleğe almak, kullanıcıların eski içerik görmesine neden olabilir. Uygun bir son kullanma süresi ayarlayın.
  • CDN’yi Göz Ardı Etmek: Kullanıcılarınız farklı bölgelerdeyse, CDN kullanmak TTFB’yi önemli ölçüde azaltabilir. ServerNet, İranlı kullanıcılar için oldukça faydalı olan yerel düğümlerle CDN hizmetleri sunar.
  • Sürekli İzleme Yapmamak: TTFB, trafik artışı veya site değişiklikleriyle değişebilir. Periyodik olarak ölçüm yapın.

Özet

TTFB’yi düşürmek, PHP, veritabanı, önbellek ve ağa dikkat edilmesini gerektiren çok katmanlı bir süreçtir. Bu makalede sunulan çözümleri uygulayarak sitenizin TTFB’sini 200 milisaniyenin altına düşürebilir ve daha iyi bir kullanıcı deneyimi sağlayabilirsiniz. Unutmayın, TTFB’deki her milisaniyelik azalma, dönüşüm oranlarını artırabilir ve sitenizin arama sonuçlarındaki sıralamasını iyileştirebilir.

Başlamak için önce mevcut TTFB’nizi ölçün, ardından sorunlu bölümlerden birini seçin ve ilgili çözümleri uygulayın. Her değişiklikten sonra etkisini görmek için tekrar ölçüm yapın.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

İletişim
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın