İki saat, iki ayrı yerde
Tarayıcıda çalışan bir oyunun iki ayrı zamanı vardır. Birincisi sizin cihazınızdaki istemci zamanı: ekranı çizen, tuşlarınızı okuyan ve sunucudan gelen durumu yorumlayan döngü. İkincisi sunucudaki maç zamanı: tick aralığıyla ilerleyen, tüm oyuncular için tek ve bağlayıcı olan akış.
Sekme görünür olduğunda bu iki saat birbirine sıkı sıkıya bağlıdır. Sekme arka plana alındığında ise bağ gevşer. İstemci tarafındaki saat yavaşlar ya da durur, sunucudaki saat ise hiçbir şey olmamış gibi işlemeye devam eder. Geri döndüğünüzde gördüğünüz tuhaflıkların neredeyse tamamı bu iki saatin yeniden hizalanmasından kaynaklanır.
Tarayıcı gizli sekmeye ne yapar
Tarayıcılar, görünmeyen sekmelerin pil ve işlemci tüketmesini istemez. Bu yüzden sekme gizlendiği anda bir dizi kısıtlama devreye girer. Kısıtlamaların ayrıntısı tarayıcıdan tarayıcıya değişse de genel çerçeve aynıdır.
| Bileşen | Görünür sekme | Gizli sekme |
|---|---|---|
| Çizim döngüsü | Ekran yenileme hızına bağlı | Durur |
| Zamanlayıcılar | İstenen aralıkta çalışır | Seyrekleştirilir, uzun süre gizli kalınca daha da yavaşlar |
| Ağ bağlantısı | Açık | Genellikle açık kalır, gelen veri gecikmeli işlenir |
| Bellek | Korunur | Bellek baskısında sekme askıya alınabilir |
Çizim döngüsünün durması, oyun açısından en görünür değişikliktir. Tarayıcı oyunlarında kare çizimi, tarayıcının "bir sonraki ekran yenilemesinde bana haber ver" çağrısına bağlanır. Sekme gizliyken ekranda yenilenecek bir şey olmadığı için bu çağrı hiç tetiklenmez. Ayrıntısı için tarayıcı oyunlarının nasıl çalıştığını anlatan yazıya bakabilirsiniz.
Platform tarafında alınan karar
Tarayıcının dayattığı kısıtlamalara ek olarak platform da bilinçli bir tercih yapıyor: değişiklik günlüğünde belirtildiği gibi arka plana alınan sekmede oyun döngüsü tamamen duraklatılıyor. Yarım çalışan bir döngü yerine tam duraklatma seçilmesinin sebebi basit: seyrekleştirilmiş zamanlayıcılarla yarım yamalak hesap yapan bir istemci, geri dönüşte tamamen durmuş bir istemciden daha çok düzeltme gerektirir.
Duraklatılan şey yalnızca istemcidir. Sunucu otoriter olduğu için maçın kendisi duraklatılamaz; diğer oyuncular oynamaya devam eder ve sizin karakteriniz son bildirdiğiniz durumda, girdi almadan oyunda kalır.
Geri döndüğünüzde ne olur
Sekme yeniden görünür olduğunda istemci üç adımı arka arkaya uygular. Bu adımlar genellikle bir saniyenin altında tamamlanır, ama arada geçen süre uzadıkça son adım daha belirgin hissedilir.
-
Bağlantıyı yoklar Adım 01
İstemci, ağ bağlantısının hâlâ açık olup olmadığını kontrol eder. Bağlantı uzun gizlilik sırasında kapanmışsa önce yeniden kurulur.
-
Biriken veriyi atar Adım 02
Gizlilik süresince gelen ara güncellemeleri tek tek oynatmak anlamsızdır. İstemci bunları atlar ve sunucunun en güncel durumunu temel alır.
-
Durumu eşitler Adım 03
Karakterlerin konumu, skor ve süre sunucudaki değerlere çekilir. Ekranda bir anlık sıçrama olarak görünen şey bu düzeltmedir.
Bu düzeltmenin mantığı, normal oyun sırasında küçük ölçekte sürekli yapılan uzlaştırma ile aynıdır. Fark yalnızca ölçektedir: normalde birkaç milisaniyelik farkı kapatan mekanizma, burada saniyelerce birikmiş farkı tek seferde kapatır. Uzlaştırmanın nasıl işlediği sunucu otoritesi sayfasında adım adım anlatılıyor.
Gizlilik süresi neden önemli
Birkaç saniyelik bir sekme değişikliği ile birkaç dakikalık bir ayrılık aynı sonucu doğurmaz. Kısa sürede bağlantı açık kalır, sunucu yalnızca sizden girdi gelmediğini görür ve dönüşte eşitleme neredeyse fark edilmeden tamamlanır.
Süre uzadıkça iki şey birden değişir. Tarayıcı zamanlayıcıları daha da seyrekleştirir, bu da bağlantıyı canlı tutan küçük yoklama mesajlarının gecikmesine yol açabilir. Aynı zamanda sunucu tarafında, uzun süre girdi göndermeyen bir oyuncu için başlığın kendi kuralları devreye girebilir. Bu yüzden maç ortasında sekmeden ayrılmanın maliyeti, ayrı kalınan süreyle orantılı olarak artar.
Mobilde durum daha sert
Masaüstünde sekme değiştirmek çoğu zaman yalnızca döngüyü durdurur. Mobilde ise başka bir uygulamaya geçmek, işletim sisteminin tarayıcının tamamını askıya alması anlamına gelebilir. Bu durumda ağ bağlantısı da kapanır ve geri dönüşte birinci adım, yani bağlantının yeniden kurulması, daha uzun sürer.
Bellek baskısı altındaki cihazlarda işletim sistemi uzun süre arka planda kalan sekmeyi tamamen boşaltabilir. Böyle bir durumda sekmeye döndüğünüzde sayfa baştan yüklenir. İlerleme sunucuda tutulduğu için kaybolmaz, ama devam eden maça yeniden katılmak gerekir. Mobil tarafın diğer kısıtları için mobil performans sayfasına bakabilirsiniz.
Pratik sonuçlar
- Maç sırasında kısa bir sekme değişikliği bile karakterinizi girdisiz bırakır; takım oyunlarında bu, takımın bir kişi eksik oynaması demektir.
- Bir şeye bakmanız gerekiyorsa oyunu ayrı bir pencerede açın; iki pencere yan yana görünür olduğu sürece tarayıcı oyun penceresini gizli saymaz.
- Geri döndüğünüzde gördüğünüz anlık sıçrama, bağlantı sorunu değil eşitlemedir; tekrar etmiyorsa müdahale gerekmez.
- Uzun aradan sonra dönüşte ekran donuk kalırsa sekmeyi yenilemek, eşitlemeyi beklemekten daha hızlı sonuç verir.
Ne zaman sorun sayılır
Sekme hiç arka plana alınmadığı hâlde aynı sıçramaları görüyorsanız konu bu yazının kapsamı dışındadır. Bu belirti çoğunlukla dalgalı bir bağlantıya ya da paket kaybına işaret eder. Görünür sekmede yaşanan sıçramalar için ping ve jitter farkı yazısıyla sorun giderme sayfasındaki belirti tablosu doğru başlangıç noktalarıdır.