Latency Optimizasyon Planı

System Check Sayfası - Gecikme Sorunu Analizi ve Çözümü

Kritik 13 Şubat 2026 4 Dosya Değişecek

Sorun Ne?

Basit Anlatım

System Check sayfasında "Gecikme" kısmı herkeste sarı veya kırmızı çıkıyor. Bunun sebebi: Şu an gecikmeyi ölçmek için Laravel'e istek atıyoruz, ama Laravel'in kendisi bile 80-120ms sürüyor. Yani kullanıcı ne kadar hızlı internete sahip olursa olsun, minimum 80ms görecek.

Sonuç: Eşikler ≤50ms "yeşil" diyor ama sunucu bile 80ms dönüyor → Herkes başarısız!

Teknik Detaylar

Mevcut Ping Testi (alpine-apps.js:845):

await fetch('/api/muzibu/ping?t=' + Date.now(), { method: 'HEAD', cache: 'no-store' });

Laravel Route (api.php:332):

Route::get('/ping', fn() => response()->json(['pong' => true, 't' => now()->timestamp]))

Laravel İşleme

40-60ms

SSL Handshake

20-25ms

Network RTT

20-50ms

Toplam: 80-135ms (en iyi durumda bile!)

Çözüm: Statik JSON Dosyası

Basit Anlatım

Laravel'e istek atmak yerine, sunucuda hazır duran küçük bir JSON dosyasına istek atacağız. Bu dosya statik olduğu için PHP/Laravel hiç devreye girmeyecek. Sonuç: 40-60ms tasarruf!

Teknik Detaylar

Oluşturulacak Dosya: /public/themes/muzibu/ping.json

{
    "pong": true,
    "static": true
}

ESKİ (Laravel)

/api/muzibu/ping
→ Route Resolution
→ Middleware Stack
→ Controller
→ JSON Response
= 80-120ms

YENİ (Statik)

/themes/muzibu/ping.json
→ Nginx/Apache serve
→ Dosya dön
= 20-40ms

Not: JSON dosyası timestamp içermeyecek çünkü statik. Ama cache: 'no-store' ile her seferinde sunucuya gidecek.

Eşik Değerleri Karşılaştırması

Gecikme (Latency) Eşikleri

Mevcut Eşikler (Gerçekçi Değil)

≤50ms Çok İyi

Sunucu bile 80ms → İmkansız!

≤100ms İyi

Çok zor - sadece fiber + yakın lokasyon

≤200ms Normal

Çoğu kullanıcı burada kalıyor

>200ms Kötü

Önerilen Eşikler (Gerçekçi)

≤100ms Çok İyi

Statik JSON ile ulaşılabilir

≤200ms İyi

Normal kullanıcılar için makul

≤350ms Normal

Mobil ağlar, uzak lokasyonlar

>350ms Yavaş

Skor Hesaplama (calculateConnectionScore)

Metrik Mevcut Eşik Mevcut Puan Önerilen Eşik Önerilen Puan
Latency - Mükemmel ≤50ms +40 ≤100ms +40
Latency - İyi ≤100ms +35 ≤200ms +35
Latency - Normal ≤200ms +25 ≤350ms +25
Latency - Uyarı ≤400ms +15 ≤500ms +15
Jitter - İyi ≤20ms +20 ≤30ms +20
Jitter - Normal ≤50ms +15 ≤60ms +15

Bar Gösterimi Formülleri

Mevcut Formül

get latencyBar() {
    return Math.max(0, 100 - (this.latencyMs / 5));
}

Sonuçlar:

50ms →%90
100ms →%80
200ms →%60
400ms →%20
500ms →%0

Önerilen Formül

get latencyBar() {
    // 500ms üzeri %0, 50ms altı %100
    return Math.max(0, Math.min(100, 100 - ((this.latencyMs - 50) / 4.5)));
}

Sonuçlar:

50ms →%100
100ms →%89
200ms →%67
350ms →%33
500ms →%0

Değişecek Dosyalar

YENİ public/themes/muzibu/ping.json

Statik ping dosyası - Laravel bypass

{
    "pong": true,
    "static": true
}
GÜNCELLEME public/themes/muzibu/js/alpine-apps.js

Ana değişiklik dosyası - Ping URL ve eşikler

Satır 845 - Ping URL değişikliği:

- await fetch('/api/muzibu/ping?t=' + Date.now(), { method: 'HEAD', cache: 'no-store' });
+ await fetch('/themes/muzibu/ping.json?t=' + Date.now(), { method: 'GET', cache: 'no-store' });

Satır 944-948 - Latency skor eşikleri:

- if (this.latencyMs <= 50) score += 40;
- else if (this.latencyMs <= 100) score += 35;
- else if (this.latencyMs <= 200) score += 25;
- else if (this.latencyMs <= 400) { score += 15; warnings.push(...); }
+ if (this.latencyMs <= 100) score += 40;
+ else if (this.latencyMs <= 200) score += 35;
+ else if (this.latencyMs <= 350) score += 25;
+ else if (this.latencyMs <= 500) { score += 15; warnings.push(...); }

Satır 1062 - Bar formülü:

- get latencyBar() { return Math.max(0, 100 - (this.latencyMs / 5)); }
+ get latencyBar() { return Math.max(0, Math.min(100, 100 - ((this.latencyMs - 50) / 4.5))); }

Satır 1063-1068 - Renk eşikleri:

- if (this.latencyMs <= 50) return '#059669';
- if (this.latencyMs <= 100) return '#4ade80';
- if (this.latencyMs <= 200) return '#facc15';
+ if (this.latencyMs <= 100) return '#059669';
+ if (this.latencyMs <= 200) return '#4ade80';
+ if (this.latencyMs <= 350) return '#facc15';

Satır 1069-1074 - Text class eşikleri:

- if (this.latencyMs <= 50) return 'text-emerald-400';
- if (this.latencyMs <= 100) return 'text-green-400';
- if (this.latencyMs <= 200) return 'text-yellow-400';
+ if (this.latencyMs <= 100) return 'text-emerald-400';
+ if (this.latencyMs <= 200) return 'text-green-400';
+ if (this.latencyMs <= 350) return 'text-yellow-400';

Satır 950-953 - Jitter eşikleri (opsiyonel):

- if (this.jitterMs <= 20) score += 20;
- else if (this.jitterMs <= 50) score += 15;
+ if (this.jitterMs <= 30) score += 20;
+ else if (this.jitterMs <= 60) score += 15;
OPSİYONEL Modules/Muzibu/routes/api.php

Eski ping route'u kaldırılabilir (satır 332-334). Ama başka yerde kullanılıyor olabilir, şimdilik bırakılabilir.

Uygulama Özeti

1

Yeni dosya oluştur

ping.json

1

Dosya güncelle

alpine-apps.js

~50ms

Beklenen iyileşme

Laravel bypass

Statik JSON ile hız artışı Gerçekçi eşik değerleri Daha adil bar gösterimi Kullanıcı memnuniyeti artacak