KRİTİK Performans Analizi

Muzibu Ana Sayfa - 2864ms Yavaşlık Analizi

Telescope Request ID: a0afb058-10f2-42f0-8198-f614a964e32e

26 Aralık 2025 - muzibu.com (Tenant 1001)

📊 Özet İstatistikler

2864ms
Toplam Süre
284
SQL Query
86
View Render
18MB
Memory

📝 Basit Anlatım (Herkes İçin)

Ana sayfa neden yavaş? Sayfa açıldığında sistem veritabanına 284 kez soru soruyor. Bunun 174'ü aynı soru: "Bu içerik favorilere ekli mi?"

Benzetme: Bir markete gittiğinizi düşünün. Her ürün için "Bu ürün indirimde mi?" diye kasaya koşup soruyorsunuz. Oysa tek seferde "Hangi ürünler indirimde?" diye sorsanız işlem çok hızlı olurdu.

Sonuç: Sayfa açılması 2.8 saniye sürüyor. Optimize edilirse 0.5 saniye altına düşürülebilir.

🔧 Teknik Detaylar (Geliştiriciler İçin)

🚨 #1 - N+1 Problem: Favorites Check (174 query)

select exists(select * from `favorites` where `favorites`.`favoritable_type` = 'Modules\Muzibu\App\Models\...' and ...)
  • Toplam Süre: 82.86ms (174 query x ~0.5ms)
  • Sorun: Her şarkı/playlist/album için ayrı ayrı favorite kontrolü
  • Kaynak: isFavorite() metodu Blade'de loop içinde çağrılıyor

✅ Çözüm:

Controller'da tüm favorileri tek sorguda çek, view'a geçir. $favoriteIds = auth()->user()->favorites()->pluck('favoritable_id')

⚠️ #2 - Playlist Songs Count Subquery (66.87ms)

select `muzibu_playlists`.*, (select count(*) from `muzibu_songs` inner join `muzibu_playlist_song`...) as songs_count
  • Sorun: Her playlist için subquery ile şarkı sayısı hesaplanıyor
  • Çözüm: withCount('songs') kullan veya songs_count field'ı cache'le

⚠️ #3 - Album Songs Count Subquery (35.21ms)

select `muzibu_albums`.*, (select count(*) from `muzibu_songs` where...) as `songs_count`
  • Çözüm: songs_count field'ı ekle, şarkı eklendiğinde increment yap

📋 #4 - Settings Queries (~15 query, 41ms)

  • • Her setting('key') çağrısı 2 query atıyor
  • Çözüm: Settings service'te cache kullan veya eager load

📋 #5 - Subscriptions Check (3 query, 23ms)

  • • Aynı kullanıcının subscription'ı 3 kez kontrol ediliyor
  • Çözüm: Session'a cache'le veya UserService'te singleton kullan

📈 Query Dağılımı (En Yavaşlar)

Süre Query
61.58ms Playlist songs count (subquery)
35.21ms Album songs_count (subquery)
28.86ms Playlist songs pivot query
27.06ms Corporate accounts exists check
26.90ms Genres with songs exists
21.68ms User subscription check
18.29ms Settings values (setting_id = 241)

🎯 Öncelikli Düzeltmeler

P1

Favorites N+1 Çözümü

174 query → 1 query = ~80ms kazanç

P2

Playlist/Album songs_count Cache

Subquery → Cached field = ~100ms kazanç

P3

User Subscription Session Cache

3 query → Session = ~23ms kazanç

P4

Settings Eager Loading

~15 query → 1 query = ~40ms kazanç

🚀 Beklenen İyileşme

2864ms
Şu anki durum
284 query
~400ms
Optimize sonrası (hedef)
~30 query

7x hızlanma potansiyeli

📁 İlgili Dosyalar