Anasayfa / Blog / Teknoloji

Tarayıcıların Otomatik Yenileme Döngüsü: İstemci ve Sunucu Tarafındaki Yükü Engelleme


Problemin Kök Nedeni ve Sistem Üzerindeki Yükü

Chrome mimarisi, yanıt vermeyen veya bellek kısıtı nedeniyle bellekten atılan (Tab Discarding) sekmeleri kullanıcı sekmeye her tıkladığında otomatik olarak yeniden yüklemeye çalışır. Bu durum şu mekanizmalarla sisteme yük bindirir:

  • İstemci Tarafı (Cihaz Yükü): Ağ koptuğunda veya sunucu 5xx hatası döndüğünde Chrome’un arka plan döngüsü sürekli olarak JavaScript motorunu (V8) ve DOM işleyicisini (Blink) yeniden başlatır. Bu durum işlemci çekirdeklerini %100 kullanıma zorlar, batarya tüketimini hızlandırır ve tarayıcının kilitlenmesine neden olur.
  • Sunucu Tarafı (Mikro-DDoS Etkisi): Yüksek trafikli bir web sitesinde geçici bir veritabanı kesintisi yaşandığında, açık sekmelere sahip binlerce Chrome istemcisi aynı anda sayfayı sürekli yenilemeye başlar. Ağ hatası düzeldiği anda sunuculara aniden yüz binlerce eşzamanlı istek düşer ve altyapının toparlanmasını engeller.

İstemci ve Sistem Yönetimi Tarafında Çözümler

Kullanıcılar veya IT sistem yöneticileri düzeyinde tarayıcının bu agresif yenileme davranışını kontrol altına almak mümkündür:

  • Bellek Tasarrufu İstisnaları Oluşturmak: Chrome Performance ayarlarından (chrome://settings/performance) sık kullanılan veya ağır web uygulamalarını (CRM, ERP, analiz panelleri) Her zaman etkin kalacak siteler listesine ekleyin. Böylece tarayıcı bu sekmeleri bellekten boşaltmaz ve yeniden yükleme döngüsüne girmez.
  • Arka Plan Otomatik Yenilemeyi Devre Dışı Bırakmak: Gelişmiş ayarlar veya dağıtım politikaları (Group Policy) üzerinden Chrome’un ağ kesintilerinde sayfayı otomatik yeniden yükleme parametrelerini kısıtlayın.
  • Sekme Discard Yönetimi: Çok fazla sekme ile çalışan sistemlerde sekmelerin işletim sistemi tarafından "OOM Killer" (Out of Memory) ile öldürülmesini engellemek için chrome://discards adresinden kritik sekmelerin Auto Discardable durumunu kapatın.

Yazılım Mimarisi ve Sunucu Tarafında Alınacak Tedbirler

Web uygulaması geliştiricileri, Chrome istemcilerinin kilitlenmesini ve sunucuyu boğmasını kod seviyesinde engellebilir:

1. Service Worker ile Ağ Katmanı Çözümlemesi (Offline Fallback)

Sayfa yanıt vermediğinde Chrome'un varsayılan ağ yenilemesine düşmesini engellemek için bir Service Worker mimarisi kurun. Ağ hatası durumında istemciye katı bir döngü yerine statik bir önbellek sayfası sunun:

// service-worker.js
self.addEventListener('fetch', (event) => {
  event.respondWith(
    fetch(event.request).catch(() => {
      // Ağ hatasında sunucuya sürekli gitmek yerine önbellekteki statik hata sayfasını ver
      return caches.match('/offline-fallback.html');
    })
  );
});

2. Katlanarak Artan Bekleme Süresi (Exponential Backoff)

Eğer web uygulamanız arka planda veri çekiyorsa (polling/fetch), bağlantı koptuğunda yenileme isteğini anında değil, katlanarak artan sürelerle (1s, 2s, 4s, 8s...) tekrarlayın.

3. HTTP Retry-After Header Kullanımı

Sunucu aşırı yüklendiğinde veya bakıma girdiğinde 503 Service Unavailable yanıtı ile birlikte Retry-After başlığı gönderin. Modern istemciler ve botlar bu süre boyunca sunucuya yeniden yükleme isteği atmayı durdurur:

HTTP/1.1 503 Service Unavailable
Retry-After: 120
Content-Type: text/html

Chrome’un agresif sayfa yenileme davranışı, hem son kullanıcı deneyimini düşüren hem de sunucu kaynaklarını tüketen gizli bir performans hırsızıdır. İstemci tarafında performans politikalarını yapılandırmak, uygulama katmanında ise Service Worker ve Exponential Backoff stratejilerini benimsemek bu sonsuz döngünün önüne geçmenin en etkili yoludur.