1. Sorun Nedir?
Player, tüm kullanıcılara aynı ağırlıkta çalışıyor. Güçlü bir bilgisayarda sorunsuz çalışan bu yapı, eski telefonlarda ve yavaş internette donma, takılma ve şarkı geçişlerinde kesinti yaratıyor.
Eski Cihaz Sorunu
2 GB RAM, 2 çekirdek işlemcili telefonlarda player tüm belleği ve işlemci gücünü tüketiyor.
1.5 MB JavaScript — Sayfa açılmadan önce indirilip çalıştırılmalı
120-150 MB RAM — Çalma + preload + debug + HLS havuzu
AES-128 şifre çözme — Her ses parçası CPU'da şifresi çözülüyor
Yavaş İnternet Sorunu
Kötü bağlantıda ses akışı takılıyor ve üstüne bir de otomatik hız testi başlatılarak bağlantı iyice tıkanıyor.
5-8 HTTP isteği — Her şarkı için sunucuya 5-8 ayrı istek
10 MB otomatik hız testi — Takılma olunca tetikleniyor
Preload 20 MB — Sıradaki şarkı önceden indiriliyor
Geçiş Sorunu
Şarkıdan şarkıya geçiş sırasında eski şarkının temizliği + yeni şarkının hazırlanması sırasında donma ve sessizlik yaşanıyor.
9 bileşen temizleniyor — HLS kapatma, timer durdurma, bellek temizleme
3 sunucu isteği — stream URL + key + playlist isteği
HLS başlatma — Manifest parse + key çözme + ilk segment
2. Kısır Döngü — Donma Neden Artarak Devam Ediyor?
Yavaş internette player kendi kendini kötüleştiren bir döngüye giriyor. Takılma → hız testi → daha çok takılma → tekrar hız testi.
Şarkı takılıyor (buffer event)
Yavaş internet yüzünden ses akışı duraksıyor. Bu normal bir durum — internet hızı yetmiyordur.
buffer-monitor tetikleniyor
BUFFER_THRESHOLD = 1Sadece 1 takılma yeterli! buffer-monitor.js "internet yavaş mı?" diye hız testini başlatıyor. Eşik çok düşük — tek bir takılmada tetikleniyor.
speed-tester 10 MB indirmeye başlıyor
10 MB download!Zaten yavaş olan internet hattından bir de 10 MB'lık hız testi dosyası indiriliyor. Şarkı ses akışı ile hız testi birbirine rakip oluyor.
Şarkı daha çok takılıyor
10 MB indirme bant genişliğini yiyor → ses akışına yeterli bant kalmıyor → şarkı tekrar takılıyor veya tamamen duruyor.
30 dakika sonra aynı döngü tekrar başlıyor
COOLDOWN = 30 dkCooldown süresi bitince buffer-monitor yine tetiklenir → yine 10 MB → yine takılma. Kullanıcı: "Bu site sürekli donuyor."
3. Donma Yapan Bileşenler — Hangisi Ne Kadar Yük Getiriyor?
Aşağıdaki bileşenler eski/yavaş cihazlarda gereksiz yük oluşturuyor. Her birinin ne kadar kaynak tükettiği ve Soft Mode'da ne yapılacağı gösterilmiştir.
performance-debug.js
180 KB 3.505 satır KALDIRHEAD'de yükleniyor — sayfa açılmadan önce indirilmesi gerekiyor (render-blocking)
Tükettiği Kaynaklar
- ~3-4 MB RAM (PerformanceObserver, timeline verileri)
- CPU: Her 50ms+ işlemi izliyor (longtask observer)
- 180 KB indirme (yavaş internette ~2-3 sn)
- Parse + çalıştırma: Eski cihazda 500ms-1sn
Neden Gereksiz?
- Sadece geliştirici aracı, kullanıcıya gösterilmiyor
- Freeze analizi, jank tespiti → geliştirme ortamı için
- Kaldırılması hiçbir özelliği etkilemez
- Tüm kullanıcılarda kaldırılabilir
speed-tester.js + buffer-monitor.js
690 satır DEVRE DIŞIİkisi birlikte çalışarak kısır döngüyü oluşturuyor
Tükettiği Kaynaklar
- Otomatik test: 10 MB + 5 ping
- Manuel test: 100 MB indirme
- Bant genişliğini yiyor → şarkı takılıyor
- 30 dk cooldown sonrası tekrar tetikleniyor
Soft Mode'da Ne Yapılacak?
- Otomatik tetikleme tamamen kapatılacak
- Manuel test istenirse sadece 1 MB ile yapılacak
- buffer-monitor sadece log tutacak, aksiyon almayacak
- Kısır döngü tamamen kırılacak
Preload Sistemi (Sonraki Şarkıyı Önceden Yükleme)
player-core.js içinde KAPATŞarkının %80'inde sıradaki şarkı arka planda yükleniyor
Tükettiği Kaynaklar
- ~20 MB RAM (yeni HLS instance + segment'ler)
- Bant genişliği: Stream URL + key + segment indirme
- CPU: Ek HLS instance yönetimi
Soft Mode'da Ne Yapılacak?
- Preload tamamen kapatılacak
- Şarkı bitince sıradaki yüklenmeye başlayacak
- Geçişte 1-3 sn bekleme olabilir ama donma olmaz
- 20 MB RAM tasarrufu
HLS Havuzu (HlsPool) — 3 Instance
player-core.js içinde 1'E DÜŞÜRAynı anda 3 HLS motoru açık tutabiliyor (aktif + preload + havuz)
Tükettiği Kaynaklar
- Her instance ~20 MB RAM → 3 adet = ~60 MB
- Her biri ayrı AES-128 şifre çözüyor
Soft Mode'da Ne Yapılacak?
- Havuz 1'e düşürülecek (sadece aktif şarkı)
- ~40 MB RAM tasarrufu
HLS → MP3 Geçişi
En etkili optimizasyon GEÇİŞ YAPHLS: Parçalı + şifreli + adaptif kalite. MP3: Tek dosya, basit, hafif.
HLS (Şu Anki Durum)
- Manifest indir → key indir → segment'leri parça parça indir
- Her segment'in şifresi CPU'da çözülüyor
- Her şarkı için 5-8 HTTP isteği
- HLS.js kütüphanesi: 100 KB + ~20 MB RAM
- CPU yoğun (şifre çözme + adaptif kalite hesaplama)
MP3 (Soft Mode)
- Tek dosya — doğrudan indirip çal
- Şifre çözme yok → CPU yükü ~%80 azalır
- Sadece 1-2 HTTP isteği (stream URL + dosya)
- Howler.js: 50 KB + ~5 MB RAM
- Anında çalmaya başlar (progressive download)
SPA Router Sayfa Önbelleği — 50 Sayfa
spa-router.js 10'A DÜŞÜRZiyaret edilen sayfalar bellekte tutuluyor, tekrar ziyarette yeniden indirilmiyor
50 Sayfanın Maliyeti
- Her sayfa ortalama 200-500 KB DOM → toplamda ~10-25 MB
- Alpine.js tree cleanup her sayfada çalışıyor
Soft Mode'da
- Cache 10 sayfaya düşürülecek
- ~15 MB RAM tasarrufu
4. Şarkı Geçişi Sorunu & Çözümü
Şarkıdan şarkıya geçiş, player'ın en kritik anıdır. Eski şarkının temizlenmesi, yeni şarkının yüklenmesi, güvenlik kontrolü — tüm bunlar aynı anda olurken kullanıcı donma ve sessizlik yaşıyor.
Normal Mod — Geçiş Süreci
Eski cihazda 3-8 sn donma
İyi internette: ~1.2 sn sessizlik
Yavaş internette: 3-8 sn donma + sessizlik
Soft Mode — Geçiş Süreci
Eski cihazda 0.5-2 sn bekleme
İyi internette: ~0.5 sn (neredeyse anında)
Yavaş internette: 1-2 sn (kabul edilebilir)
Çalma Sırasında Donma — Neden Oluyor, Nasıl Önlenir?
Şu An Donma Sebepleri
HLS segment şifre çözme
Her 2-10 sn'de bir yeni segment → CPU'da AES-128 çöz → 2 çekirdekte jank
Buffer health check (500 ms)
Her yarım saniyede ses akışı sağlık kontrolü → eski CPU'da yük
Performance observer
Debug paneli her 50ms+ işlemi kaydediyor → çözmeye çalışırken donduruyor
Otomatik hız testi
Takılma olunca 10 MB indirme → bant genişliği çalınıyor
Soft Mode'da Çözüm
MP3 progressive download
Şifre çözme yok → CPU boşta → donma yok
Buffer health check kapalı
MP3'te gerekli değil, Howler.js kendi yönetiyor
Debug paneli kapalı
180 KB + 3-4 MB RAM tamamen tasarruf
Hız testi kapalı
Bant genişliği sadece şarkıya ayrılır
5. Normal Mod vs Soft Mode — Tam Karşılaştırma
| Özellik | Normal Mod | Soft Mode | Tasarruf |
|---|---|---|---|
| Ses formatı | HLS (şifreli, parçalı) | MP3 (tek dosya, basit) | CPU %80 azalır |
| Toplam JS boyutu | ~1.5 MB | ~1.1 MB | ~400 KB |
| HEAD render-blocking JS | 791 KB | ~611 KB | 180 KB |
| RAM kullanımı (çalma) | 120-150 MB | 30-50 MB | ~100 MB |
| HLS instance sayısı | 3 (havuz) | 0 (MP3 kullanır) | ~60 MB RAM |
| Preload (önceden yükleme) | Açık (~20 MB) | Kapalı | ~20 MB RAM |
| Debug paneli | Açık (180 KB + 4 MB RAM) | Kapalı | 180 KB + 4 MB |
| Otomatik hız testi | Açık (10 MB indirme) | Kapalı | 10 MB bant genişliği |
| Buffer monitor | Açık (eşik: 1) | Kapalı | Kısır döngü kırılır |
| SPA sayfa cache | 50 sayfa | 10 sayfa | ~15 MB RAM |
| Şarkı geçiş süresi | 1.2 - 8 sn | 0.5 - 2 sn | %60-75 hızlanma |
| HTTP isteği (şarkı başı) | 5-8 istek | 1-2 istek | %75 azalma |
| Ses kalitesi | Adaptif (64-320 kbps) | Sabit (128 kbps) | Kalite farkı minimal |
6. Soft Mode Nasıl Çalışacak?
Soft Mode'un devreye girişi iki yoldan olacak: otomatik tespit veya admin panelinden manuel atama.
Otomatik Tespit
Cihaz kendisi karar verir
device-profiler.js zaten cihaz bilgilerini topluyor. Aşağıdaki eşik değerlerden herhangi birini karşılayan cihaz otomatik olarak Soft Mode'a geçer:
Admin Panelden Manuel
Yönetici kullanıcı bazlı karar verir
Admin panelde her kullanıcı için "Player Modu" seçeneği olacak. Yönetici istediği kullanıcıyı Soft Mode'a alabilir:
Kullanıcı Ayarları
Kalite Ayarı
Karar Akışı — Kullanıcı Şarkı Çaldığında
Admin ayarına bak: Kullanıcıya özel mod atanmış mı?
Atanmışsa: O modu kullan (Normal veya Soft) → Bitti.
"Otomatik" ise: Cihaz profilini kontrol et (RAM, CPU, bağlantı hızı).
Eşik altındaysa: Soft Mode (MP3 + optimizasyonlar). Üstündeyse: Normal Mod (HLS).
Şarkıyı çal — Seçilen moda göre HLS veya MP3 ile oynat.