Performans Analizi Tenant 1001

Thumbmaker Sistem Analizi

27 Aralık 2025 - muzibu.com

📝 Basit Anlatım (Herkes İçin)

Thumbmaker, sitedeki görselleri otomatik olarak boyutlandıran ve optimize eden bir sistem. Örneğin 5MB'lık bir albüm kapağını 50KB'lık küçük bir kare haline getiriyor.

🔍 Tespit Edilen Sorun

Her görsel için 500-1700ms bekleniyor. Bir sayfada 20 görsel varsa, toplamda 10-30 saniye sadece görsel yüklemek için harcanıyor.

✅ Olması Gereken

Görseller bir kez işlendikten sonra cache'den 5ms'de gelmeli. Bu şekilde sayfa yüklemesi çok hızlanır.

🔧 Teknik Detaylar (Geliştiriciler İçin)

📁 Dosya Yapısı

app/helpers.php → thumb() fonksiyonu (URL tabanlı)
app/Helpers/MediaHelper.php → thumb() fonksiyonu (ThumbnailManager)
Modules/MediaManagement/app/Http/Controllers/ThumbmakerController.php
Modules/MediaManagement/app/Services/ThumbnailManager.php
Modules/MediaManagement/config/thumbmaker.php

⚙️ İki Farklı Thumbmaker Sistemi

1. ThumbmakerController (URL Tabanlı)

  • • Route: /thumbmaker?src=...&w=...&h=...
  • • Her istekte PHP çalışıyor
  • • Static file cache var ama Nginx bypass ediyor
  • • Süre: 500-1700ms

2. ThumbnailManager (Servis Tabanlı)

  • • Direkt static URL döndürüyor
  • • Cache varsa: /storage/tenant1001/thumbmaker/HASH.webp
  • • Nginx direkt serve ediyor
  • • Süre: ~5ms

📊 Mevcut Cache Durumu

586
Cache Dosyası
8.8 MB
Cache Boyutu
WebP
Format
Konum: /storage/tenant1001/app/public/thumbmaker-cache/

🔴 Tespit Edilen Sorunlar

1. Çift thumb() Fonksiyonu Çakışması

helpers.php ve MediaHelper.php'de aynı isimde iki farklı fonksiyon var. Hangisinin yüklendiği load sırasına bağlı.

helpers.php → /thumbmaker?... URL'si döndürüyor (yavaş)
MediaHelper.php → ThumbnailManager kullanıyor (hızlı)

2. ThumbmakerController Her Zaman PHP'ye Gidiyor

/thumbmaker?... URL'si her zaman Laravel'e gidiyor. Cache dosyası olsa bile PHP başlatılıyor, middleware çalışıyor.

İstek akışı: Nginx → PHP-FPM → Laravel Bootstrap → Controller → file_exists() → Response

3. Browser Cache Header'ları Yetersiz

Cache-Control header'ı var ama browser tam sayfa yenilemede (Ctrl+F5) cache'i atlıyor.

4. Görsel Erişim Sorunu

ThumbmakerController kaynak görsele erişemiyor. src=https://muzibu.com/storage/... URL'si çözümlenemiyor.

Hata: "Görsel yüklenemedi: https://muzibu.com/storage/tenant1001/..."

✅ Çözüm Önerileri

ÖNCELİK 1

ThumbnailManager'ı Tek Kaynak Yap

helpers.php'deki thumb() fonksiyonunu kaldır, MediaHelper.php'deki kullanılsın. Bu fonksiyon cache varsa direkt static URL döndürüyor.

Avantaj:
  • • Cache'li görseller için PHP çağrısı YOK
  • • Nginx direkt static file serve ediyor
  • • ~5ms response time
ÖNCELİK 2

ThumbmakerController'a 301 Redirect Ekle

Eğer /thumbmaker URL'si kullanılmaya devam edecekse, cache varsa 301 redirect yapsın. Browser bu redirect'i cache'ler.

// ThumbmakerController::generate()
if (file_exists($staticAbsolutePath)) {
  return redirect($staticUrl, 301);
}
ÖNCELİK 3

Nginx Level Cache

/thumbmaker URL'leri için Nginx proxy cache ekle. Aynı URL tekrar geldiğinde PHP'ye gitmeden cache'den dönsün.

# nginx.conf
location /thumbmaker {
  proxy_cache thumbmaker_cache;
  proxy_cache_valid 200 30d;
}
OPSİYONEL

Lazy Loading Optimizasyonu

Sayfada görünmeyen görseller için istek atma. Kullanıcı scroll ettikçe yükle. Bu sayede ilk yükleme hızlanır.

📈 Beklenen Performans İyileşmesi

Senaryo Şu An Çözüm Sonrası Kazanç
Tek görsel (cache'li) 500-1700ms 5-10ms 100-300x
Anasayfa (20 görsel) 10-30 saniye 100-200ms 100-150x
İlk yükleme (cache yok) 500-1700ms 500-1700ms Değişmez

🎯 Önerilen Aksiyon

En az değişiklik, en çok kazanç için Öneri 1'i uygulayalım:

  1. 1. helpers.php'deki thumb() fonksiyonunu kaldır veya yeniden adlandır
  2. 2. MediaHelper.php'nin yüklenmesini garanti et
  3. 3. Blade'lerde değişiklik gerekmiyor (aynı fonksiyon imzası)
  4. 4. Cache temizle ve test et