System Check Analizi v2

Gecikme (Latency) Hesaplama Sistemi

Tüm terimler, adım adım simülasyon ve teknik detaylar

Terimler Sözlüğü

Ne? Ne demek? Ne işe yarar?

Latency (Gecikme)

Basit: İnternetin tepki süresi. "Merhaba" deyince "Merhaba" cevabı gelene kadar geçen süre.
Teknik: Round-trip time (RTT). Client'tan server'a paket gönderip ACK alana kadar geçen süre (ms).
Ölçü birimi: milisaniye (ms)

Jitter (Kararsızlık)

Basit: Bağlantının ne kadar "tutarsız" olduğu. Bazen hızlı bazen yavaş = yüksek jitter.
Teknik: Latency değerlerinin varyansı. Mean absolute deviation (MAD) formülü ile hesaplanır.
Ölçü birimi: milisaniye (ms)

Ping

Basit: Sunucuya "orada mısın?" diye sormak. Cevap gelirse bağlantı var demek.
Teknik: ICMP echo request/reply veya HTTP HEAD request. Latency ölçmek için kullanılır.
Endpoint: /api/muzibu/ping

Mbps (Hız)

Basit: Saniyede ne kadar veri indirebileceğin. Büyük = hızlı, küçük = yavaş.
Teknik: Megabit per second. 1 Mbps = 1.000.000 bit/saniye. Bandwidth ölçüsü.
Formül: (byte × 8) / süre / 1M

performance.now()

Basit: JavaScript'in hassas kronometresi. Milisaniyenin binde birini bile ölçer.
Teknik: High-resolution timestamp. DOMHighResTimeStamp döner, microsaniye hassasiyetinde.
Hassasiyet: ~0.005ms

navigator.deviceMemory

Basit: Cihazın RAM'i (belleği). 8GB+ = iyi, 4GB = orta, 2GB = zayıf.
Teknik: Device Memory API. Tahmini RAM (GB). Safari/iOS desteklemiyor, 0 döner.
Değerler: 0.25, 0.5, 1, 2, 4, 8

hardwareConcurrency

Basit: İşlemcinin "çekirdek" sayısı. 8+ = güçlü, 4 = normal, 2 = zayıf.
Teknik: Logical processor count. Fiziksel çekirdek × HyperThreading. Web Worker sayısı için kullanılır.
API: navigator.hardwareConcurrency

UAParser.js

Basit: Tarayıcı ve cihaz bilgisini okuyan kütüphane. Chrome mu Safari mi, Windows mu Mac mi anlar.
Teknik: User-Agent string parser. Browser, OS, device, engine, CPU bilgisi çıkarır.
CDN: ua-parser-js@1

Connection Score

Basit: Bağlantının 100 üzerinden puanı. 50+ = iyi, 50- = sorunlu.
Teknik: Hız(40) + Latency(40) + Jitter(20) = 100. Weighted composite score.
Eşik: ≥50 = pass, <50 = fail

Adım Adım Simülasyon

Butona tıkladığında ne oluyor?

0

Sayfa Açıldı

Kullanıcı Görüyor:

"Bağlantıyı Test Et" butonu var. Cihaz bilgileri otomatik gösteriliyor (Windows, Chrome 120 gibi).

Arka Planda:

x-init="init()" çalışır → detectDevice() çağrılır → UAParser ile cihaz bilgisi alınır.

Çalışan Kod:
this.devicePlatform = result.os?.name; // "Windows"
this.deviceBrowser = result.browser?.name; // "Chrome"
this.deviceMemory = navigator.deviceMemory; // 8
1

"Bağlantıyı Test Et" Butonuna Tıklandı

Kullanıcı Görüyor:

Buton kaybolur, yerine "Test ediliyor... 0%" yazısı ve progress bar çıkar.

Arka Planda:

runConnectionTest() başlar. State "idle" → "running" olur.

Çalışan Kod:
this.connectionState = 'running';
this.connectionProgress = 0;
2

Hızlı Başlangıç Animasyonu (0% → 30%)

Kullanıcı Görüyor:

Progress bar hızlıca %30'a ulaşır. "Test ediliyor... 30%" yazar.

Arka Planda:

50ms aralıklarla %5 artış. Görsel feedback için yapay gecikme. Henüz gerçek test yok.

Çalışan Kod:
for (let i = 0; i <= 30; i += 5) {
this.connectionProgress = i;
await this.sleep(50);
}
3

GECİKME TESTİ (30% → 60%)

Bu adım gecikmeyi ölçüyor!
Kullanıcı Görüyor:

Progress: 36% → 42% → 48% → 54% → 60%. Her ping için %6 ilerliyor.

Arka Planda:

5 kez /api/muzibu/ping endpoint'ine istek atılıyor. Her birinin süresi ölçülüyor.

Çalışan Kod:
const latencies = [];
for (let i = 0; i < 5; i++) {
const start = performance.now(); // Kronometre başlat
await fetch('/api/muzibu/ping?t=' + Date.now());
latencies.push(performance.now() - start); // Süreyi kaydet
}
// Örnek sonuç: [45, 52, 48, 55, 50]
Ping 1
45ms
Ping 2
52ms
Ping 3
48ms
Ping 4
55ms
Ping 5
50ms
4

GECİKME HESAPLANIYOR

Basit Hesap:

(45 + 52 + 48 + 55 + 50) ÷ 5 = 50ms

5 ping değerinin ortalaması alınıyor.

Jitter Hesabı:

Her değerin ortalamadan farkının ortalaması = 2.8ms

|45-50| + |52-50| + |48-50| + |55-50| + |50-50| = 14 ÷ 5

Çalışan Kod:
this.latencyMs = Math.round(latencies.reduce((a,b) => a+b) / 5);
// latencyMs = 50

const avg = this.latencyMs;
this.jitterMs = Math.round(latencies.reduce((s,l) => s + Math.abs(l-avg), 0) / 5);
// jitterMs = 3
5

HIZ TESTİ (60% → 95%)

Kullanıcı Görüyor:

Progress 65% → 80% → 95%. "Test ediliyor..." devam ediyor.

Arka Planda:

100MB'lık test dosyası indiriliyor. İndirme süresi ölçülüp Mbps hesaplanıyor.

Çalışan Kod:
const speedStart = performance.now();
const response = await fetch('/themes/muzibu/speed-test-payload.bin');
const blob = await response.blob(); // 100MB indirildi
const duration = (performance.now() - speedStart) / 1000; // saniye
this.speedMbps = (blob.size * 8 / duration / 1000000); // 45.2 Mbps
6

PUAN HESAPLANIYOR

Basit Hesap:

Hız puanı + Gecikme puanı + Kararlılık puanı = Toplam puan

Örnek:

45 Mbps = +35p | 50ms = +40p | 3ms jitter = +20p

Hız
+35
+
Gecikme
+40
+
Kararlılık
+20
=
Toplam
95

SONUÇ GÖSTERİLİYOR

Kullanıcı Görüyor:
  • • Hız: 45.2 Mbps (yeşil bar)
  • • Gecikme: 50 ms (yeşil bar)
  • • Kararlılık: İyi (yeşil bar)
  • • "Dinlemeye Hazırsınız" mesajı
Arka Planda:
  • • State: "running" → "result"
  • • Sonuçlar backend'e kaydediliyor
  • • Sayfa otomatik scroll oluyor
Çalışan Kod:
this.connectionState = 'result';
this.calculateOverallResult(); // Genel sonuç belirleniyor
this.saveTestToBackend(); // /api/muzibu/speed-test'e POST
document.getElementById('result-section')?.scrollIntoView();

Gecikme (Latency) Eşikleri

Değer Aralıkları ve Puan Karşılıkları

Gecikme (ms) Durum Puan Katkısı Renk Kullanıcı Deneyimi
≤50ms Çok İyi +40 puan
Şarkılar anında başlar, geçişler akıcı
51-100ms İyi +35 puan
Fark edilmez, sorunsuz dinleme
101-200ms Normal +25 puan
Hafif bekleme olabilir
201-400ms Yüksek +15 puan
⚠️ Şarkı geçişleri yavaş + uyarı mesajı
>400ms Çok Yüksek +5 puan
⚠️ Takılmalar, gecikmeler + uyarı mesajı

Jitter (Kararlılık) Eşikleri

Jitter (ms) Durum Puan Katkısı Anlam
≤20ms Çok İyi +20 puan Çok stabil bağlantı
21-50ms İyi +15 puan Normal stabilite
51-100ms Kararsız +10 puan ⚠️ "Bağlantınız kararsız" uyarısı
>100ms Çok Kararsız +5 puan ⚠️ "Bağlantınız çok kararsız" uyarısı

Dosya Haritası

🎯 Ana Dosyalar
├── public/themes/muzibu/js/alpine-apps.js
└── systemCheck() fonksiyonu (satır 671-1217)
├── public/themes/muzibu/js/player/features/speed-tester.js
└── MuzibuSpeedTester modülü (auto/manual test)
├── resources/views/themes/muzibu/system-check.blade.php
└── UI Template (330 satır)
└── Modules/Muzibu/App/Http/Controllers/Front/DashboardController.php
└── systemCheck() route handler (satır 422-436)
📦 Test Dosyaları
├── public/themes/muzibu/speed-test-payload.bin (100MB - manuel test)
└── public/themes/muzibu/speed-test-auto.bin (10MB - oto test)
🔗 API Endpoints
├── HEAD /api/muzibu/ping - Latency ölçümü için
└── POST /api/muzibu/speed-test - Sonuçları kaydetmek için
19 Şubat 2026 • Muzibu.com