2012'de sözü verilen çevrim içi ziyaretçi listesi artık yayında
25 Ağustos 2012'de bu blogdaki bir yazı, istatistik alanlarının kendiliğinden yenilenmeye başladığını duyurmuş ve şu cümleyle bitmişti: “Planlanan özellik, ‘Kimler çevrim içi’ listesi çok yakında!”
O yazı hâlâ burada. Duyurduğu listenin gelmesi on dört yıl sürdü. Liste artık var ve o yazının bağlantı verdiği sayaç bunca zaman boyunca çalıştı.
Neler gösteriyor
İstatistik sayfasında canlı bir panel var: şu anda sitede kaç kişi olduğunu gösteriyor ve en son gelenleri tek tek listeliyor – bağlandıkları ülke, biliniyorsa şehir, hangi sayfada oldukları ve en son ne kadar önce görüldükleri. Bir seferde on iki kişi, en yenisi en üstte.
“Şu anda”, son beş dakika demek. Bir saat sonra satırlar tamamen silinir.
Buradaki “kim” kimlik demek değil
O listedeki hiç kimsenin kimliği belli değil. Liste, çerez kullanmadan saymayı anlatan yazıda açıklanan aynı 16 baytlık günlük hash değerinden oluşturuluyor – hiçbir satırının arkasında ad, hesap, çerez ya da saklanmış bir IP adresi yok.
Ayrıca sayfanın adresinin tamamını değil, yalnızca yolunu saklar: /shop/boots, bir arama motorunun ya da bir bültenin sonuna eklediği her şeyle birlikte tam bağlantıyı değil.
Aynı şehirden aynı sayfaya bakan iki kişi de yalnızca iki satırdır. Sistemdeki hiçbir şey iki okuru, telefonda ve dizüstü bilgisayarda okuyan tek bir okurdan ayırt edemez. Bu, sonraki bir sürümde toparlanmayı bekleyen bir gözden kaçırma değil. Tasarım bu; sayacın başka her yerde yaptığı takasın aynısı: işe yarayacak kadar çok, kimseyi takip edecek kadar değil.
Bağlantıyı açık tutmadan canlı görünüm
Bunu kurmanın modern yolu WebSocket ya da server-sent events kullanmaktır – tarayıcı tek bir bağlantıyı açık tutar ve sunucu güncellemeleri oldukları anda bu bağlantıdan iletir. Zarif çözüm budur; burada ise yanlış çözüm olurdu.
Bu sitenin web sunucusu her açık bağlantı için bir süreç kullanır ve asıl işi birkaç bin web sitesinin sayaç isteklerini yanıtlamaktır. Açık tutulan bir bağlantı, başka kimseye yanıt veremeyen bir süreç demektir. Canlı sayfasını izleyen elli kişi, birkaç dakikada bir değişen bir sayıyı iletmek için boşta bekleyen elli süreç anlamına gelirdi.
Bu yüzden sayfa bunun yerine her on beş saniyede bir sorar ve küçük bir JSON bloğu çeker. Bunun çevresinde, aralıktan daha önemli üç karar var:
- İstekler başarısız olmaya başlarsa sıklığı dakikada bire düşürür – zaten zorlandığı belli olan bir sunucuyu istek yağmuruna tutmak yerine.
- Arka plandaki bir sekmede sormayı tamamen bırakır, sekme yeniden öne geldiği anda da yenilenir. Gizli bir sekmeyi kimse izlemez ve istek, yararlı bir istek kadar maliyetli olurdu.
- Sayfadaki N saniye önce güncellendi satırı yerel olarak, saniyede bir ileri sayar ve hiçbir maliyeti yoktur. Veriyi değiştirmek için istek gerekir, eskitmek için değil.
Bunların hiçbiri zekice değil. Orantılı; küçük bir sunucuda da ikisinden daha değerli olan özellik budur. Canlı bir görünümün çalışması, izlediği şeyden daha pahalı olmamalı.
Geri gelmeyen bir parça
Eylül 2015'te bir yazı yayımlanmıştı: Kullanıcılar sekmesi, bir sayfayı etkin olarak okuyan biriyle onu arka plandaki bir sekmede açıp varlığını unutan birini ayırt etmeyi öğreniyordu.
Bu ayrım geri gelmedi. Şimdiki liste bir ziyaretçinin en son ne zaman görüldüğünü biliyor; bakıp bakmadığını bilmiyor. Bunu bilmek gerçekten değerli – her sitenin “ziyaretçilerinin” azımsanmayacak bir kısmı unutulmuş bir sekmedir – bu yüzden yapılacaklar listesinde.
Umarız bu sefer on dört yıl sürmez.
Deneyin
2012'deki yazı canlı bir örneğe bağlantı vererek bitiyordu; bu yazıyı da böyle bitirmek doğru görünüyor. Bu arada o ilk bağlantı hâlâ çalışıyor: arkasındaki sayaç bunca zamandır çalışıyor ve 1,3 milyon ziyareti geçti.
İşte canlı bir örnek, bakmak için hesap gerekmiyor.