Ayrılma Takibi
sendBeacon ile sekme kapanırken veri gönderilir.
Klasik XHR ile gönderilen istekler, kullanıcı sekmeyi kapattığı anda tarayıcı tarafından iptal edilir. Veri uçar.
Veribenim, <strong>pagehide</strong> eventinde <strong>navigator.sendBeacon</strong> çağırır. Beacon, tarayıcı kapatılsa bile kuyruğa alınıp gönderilir.
Oturum #4821 — Zaman Çizelgesi
pagehide → sendBeacon ile kaydedildi
Neden XHR Yetersiz?
❌ XHR / Fetch
Sekme kapanınca istek iptal edilir
- • Kullanıcı sekmeyi kapatırken fetch isteği tarayıcı tarafından iptal edilir
- • beforeunload / unload eventleri güvenilmez — özellikle mobilde hiç tetiklenmeyebilir
- • Sonuç: Oturum süresi verisi uçar, çıkış kaydı oluşmaz
✅ navigator.sendBeacon
Tarayıcı kuyruğa alır, teslim eder
- •
pagehideeventinde çağrılır — mobil de dahil tüm modern tarayıcılarda tetiklenir - • Tarayıcı, beacon'ı kuyruğa alır; sekme kapansa bile arka planda gönderir
- • Ana thread bloke olmaz, kullanıcı herhangi bir gecikme yaşamaz
Ne Kaydedilir?
Çıkış Zamanı
Beacon timestamp'i ile ziyaretçinin tam ayrılış anı milisaniye hassasiyetinde kaydedilir.
Toplam Oturum Süresi
İlk visit logundan exit loguna kadar geçen süre hesaplanır. Maksimum 30 dakika cap uygulanır — çok uzun kalan sekmeler istatistiği bozmaz.
is_exit Flag
Backend, bu isteğin bir çıkış beacon'ı olduğunu bilir. Impression sayacı artırılmaz, yalnızca exit logu oluşturulur.
Kod
// Ayrılma tespiti (bundle içi)
sendExitBeacon: function() {
var data = utils.getLocalStorage('veribenimIsAwesome');
if (!data || !navigator.sendBeacon) return;
var payload = JSON.stringify({
session_id: data.sessionId,
last_visit: new Date().toISOString(),
is_exit: true
});
navigator.sendBeacon(config.trackingUrl, payload);
}
// Tetikleyici
window.addEventListener('pagehide', sendExitBeacon);
Yalnızca <code>pagehide</code> eventi kullanılmaktadır. <code>visibilitychange</code> ve <code>beforeunload</code> implemente edilmemiştir.