📊 Analiz & Optimizasyon ⚡ Performans

Muzibu Player Preload Optimizasyonu

Anında Müzik Deneyimi için Agresif Preload Stratejisi

📅 6 Ocak 2026 • 🎵 Muzibu Music Platform
📝

Basit Anlatım (Herkes İçin)

Problem: Kullanıcı müziğe girince ilk şarkıya bastığında "yükleniyor" beklemesi yaşanıyor. Şarkı değiştirince de aynı şekilde bekliyor. Bu kötü bir deneyim!

İstenen: Kullanıcı siteye girdiği anda, ilk şarkı zaten hazır olmalı. Play'e bastığında ANINDA çalmalı! Bir şarkı çalarken, sıradaki şarkı arkaplanda sessizce yüklenmeli. Next'e bastığında gene ANINDA başlamalı!

🎯 Hedef: YouTube gibi

YouTube'da video açtığınızda play'e basmadan önce video hazır, play'e basınca anında başlar. Aynısını müzik için yapıyoruz. Kullanıcı hiç beklemeyecek, her şey hazır olacak!

❌ Şu Anki Durum (Yavaş)

  • Sayfa açılınca: 500ms bekliyor, sonra yüklemeye başlıyor (yavaş!)
  • Şarkı çalarken: 2. saniyeye kadar bekliyor, sonra sıradaki şarkıyı yüklüyor (çok yavaş!)
  • Sonuç: Play'e basınca 2-3 saniye bekliyor, next'e basınca 1-2 saniye bekliyor

✅ Yeni Sistem (Hızlı)

  • Sayfa açılınca: HEMEN yüklemeye başlıyor (0ms gecikme!)
  • Şarkı çalarken: 0.5 saniyede sıradaki şarkı yüklenmeye başlıyor (çok hızlı!)
  • Sonuç: Play'e basınca ANINDA başlar, next'e basınca ANINDA geçer
🔧

Teknik Detaylar (Geliştiriciler İçin)

📁 İlgili Dosya

public/themes/muzibu/js/player/core/player-core.js

⚙️ Preload Sistemi

Player iki tür preload kullanıyor:

  1. 1. İlk Şarkı Preload (Last Played):
    • Fonksiyon: preloadLastPlayedSong()
    • Sayfa yüklenince çalışır
    • Kullanıcının en son çaldığı şarkının stream URL'ini cache'ler
    • Sadece URL alır, HLS instance oluşturmaz (hafif)
  2. 2. Sıradaki Şarkı Preload (Next Song):
    • Fonksiyon: preloadNextSong()
    • Şarkı çalarken arkaplanda çalışır
    • HLS instance oluşturur, ilk segment'i (10sn) yükler
    • Segment yüklenince durdurur (bandwidth tasarrufu)
    • Next basınca hazır olduğu için anında başlar

🎯 Preload Trigger Noktaları

Olay Mevcut Timing Yeni Timing Etki
Sayfa yüklendi 500ms sonra 0ms (anında) İlk play anında başlar
Şarkı çalmaya başladı 2000ms sonra 500ms sonra Next basınca anında geçer
Spot çalmaya başladı 2000ms sonra 500ms sonra Spot bitince şarkı anında devam eder
⏱️

Mevcut Sistem: Zaman Çizelgesi

📍 Senaryo 1: Kullanıcı Login Oldu

0ms Sayfa yüklendi (DOM ready)
+500ms ⏸️ BEKLE: setTimeout(500ms)
500ms 🚀 preloadLastPlayedSong() başladı
~700ms ✅ API'den stream URL alındı
SONUÇ Play basınca 200-300ms yükleme süresi var

📍 Senaryo 2: Şarkı Çalıyor

0s 🎵 Şarkı çalmaya başladı
+2s ⏸️ BEKLE: currentTime >= 2
2s 🚀 preloadNextSong() başladı
~2.5s ✅ Sıradaki şarkı hazır (HLS segment yüklendi)
SORUN 2 saniye boyunca hiçbir şey hazırlanmıyor!

Yeni Sistem: Agresif Preload

📍 Senaryo 1: Kullanıcı Login Oldu (Optimize)

0ms Sayfa yüklendi (DOM ready)
+0ms ⚡ ANINDA: preloadLastPlayedSong() başladı
~200ms ✅ Stream URL cache'de
SONUÇ Play basınca ANINDA başlar (0ms gecikme!)

📍 Senaryo 2: Şarkı Çalıyor (Optimize)

0s 🎵 Şarkı çalmaya başladı
+0.5s ⚡ HIZLI: preloadNextSong() başladı
~1s ✅ Sıradaki şarkı hazır (HLS segment yüklendi)
KAZANÇ 1.5 saniye daha erken hazır! Next basınca ANINDA!
📊

Performans Karşılaştırması

❌ Mevcut Sistem

İlk play basınca: ~700ms
Next basınca: ~1500ms
Preload başlangıç: +2s gecikmeli
Kullanıcı deneyimi: 😐 Orta

✅ Yeni Sistem

İlk play basınca: ~200ms
Next basınca: ~100ms
Preload başlangıç: Anında!
Kullanıcı deneyimi: 😍 Mükemmel

📈 İyileştirme Oranları

71%
İlk play daha hızlı
93%
Next geçiş daha hızlı
75%
Preload daha erken
💻

Yapılacak Kod Değişiklikleri

1️⃣ İlk Şarkı Preload - Delay Kaldır

Satır: ~488-492
❌ ESKİ: setTimeout(() => { preloadLastPlayedSong(); }, 500);
✅ YENİ: this.preloadLastPlayedSong(); // Anında!

2️⃣ Next Song Preload - Timing Agresif

3 yerde: ~3361, ~3546, ~4564
❌ ESKİ: if (!self._nextSongPreloaded && currentTime >= 2)
✅ YENİ: if (!self._nextSongPreloaded && currentTime >= 0.5)

3️⃣ Spot Preload - Timing Agresif

3 yerde: ~3373, ~3558, ~4576
❌ ESKİ: if (!self._spotPreloaded && self.currentTime >= 2)
✅ YENİ: if (!self._spotPreloaded && self.currentTime >= 0.5)

4️⃣ Console Log Mesajları - Güncelle

"PRELOAD TRIGGER at 2s" → "PRELOAD TRIGGER at 0.5s"
"SPOT PRELOAD at 2s" → "SPOT PRELOAD at 0.5s"
Debug mesajları güncellenerek gerçek timing'i gösterecek.
🎯

Beklenen Sonuçlar

✨ Kullanıcı Deneyimi

  • Sayfa açılır açılmaz play'e basınca ANINDA müzik başlar
  • Next/Previous basınca ANINDA şarkı değişir
  • Hiç "yükleniyor" beklemesi olmaz
  • Spotify/YouTube seviyesinde smooth deneyim

⚡ Performans

  • Bandwidth kullanımı aynı kalır (sadece timing değişti)
  • HLS segment sistemi değişmedi (10sn preload)
  • Cache mantığı aynı (expired URL kontrolü aktif)
  • Gereksiz yükleme yok (ready flag'leri var)
⚠️

Risk Analizi

❓ Potansiyel Riskler

1. Bandwidth Artışı?
✅ HAYIR - Sadece timing değişti, yüklenen data miktarı aynı. Preload zaten tek segment (10sn), stopLoad() ile durdurulur.
2. CPU/Memory Kullanımı?
✅ HAYIR - HLS instance ve audio element mantığı aynı. Sadece başlangıç zamanı değişti.
3. Mobile Performans?
✅ HAYIR - preload="auto" zaten kullanılıyor. Browser'lar mobile'da otomatik optimize eder.

✅ Güvenlik Mekanizmaları

  • Guard flag'ler: _preloadNextInProgress, _nextSongPreloaded (duplicate önleme)
  • Cache expiry: URL'ler 4 dakika sonra expire olur (fresh stream garantisi)
  • Ready check: Preload bitmeden play edilmez (race condition yok)
  • Cleanup: Eski HLS instance'lar düzgün temizlenir (memory leak yok)