GitHub Issues'ta anlık gezinme: IndexedDB önbellek mimarisi
GitHub, Issues sayfalarındaki gezinme gecikmesini azaltmak için IndexedDB tabanlı önbellekleme, ön ısıtma ve service worker kullanan yeni bir istemci mimarisi geliştirdi.
GitHub, Issues sayfalarında gezinirken oluşan gecikmeleri gidermek için mimariyi yeniden ele aldı. Ekip, backend'de küçük iyileştirmeler yapmak yerine işi istemci tarafına kaydırarak veriyi yerelden anında göstermeyi, ardından arka planda sunucuyla senkronize etmeyi hedefledi. Bunun için IndexedDB tabanlı bir önbellek katmanı, önbellek isabet oranını artıran bir ön ısıtma stratejisi ve sert (hard) gezinmelerde bile önbelleğin kullanılabilir kalmasını sağlayan bir service worker devreye alındı.
Performansı ölçmek için GitHub, Web Vitals LCP metriğine yakın kendi dahili metriği olan HPC'yi (Highest Priority Content) kullandı ve gezinmeleri 200ms altı 'anlık', 1000ms altı 'hızlı' ve üzeri 'yavaş' olarak sınıflandırdı. Odak noktası yalnızca en kötü kuyruk (p99) gecikmelerini iyileştirmek değil, kullanıcıların çoğunluğu için hız dağılımını iyileştirmekti; zira p99'u iyileştirmek medyan deneyimi otomatik olarak hızlandırmıyor.
Başlangıç analizi, gezinmelerin üç türe ayrıldığını gösterdi: tam sayfa yükleyen sert gezinmeler, Rails Turbo geçişleri ve React içi yumuşak gezinmeler. En yavaş yol olan sert gezinmeler aynı zamanda en yaygın kullanılan yoldu; bunun büyük kısmı GitHub'ın hâlâ Rails'ten React'e geçiş sürecinde olmasından, kullanıcı yolculuklarının bu sınırı sıkça geçmesinden kaynaklanıyordu. Ekip, en fazla mimari kontrole sahip olduğu React yumuşak gezinmelerinden başlayarak, tekrarlanan erişim örüntülerine dayanarak yaklaşık %30'luk bir önbellek isabet oranı hedefiyle 'stale-while-revalidate' modelini uygulamaya koydu.
Bu yaklaşım, veri ağırlıklı web uygulamaları geliştiren mühendisler için doğrudan uygulanabilir bir model sunuyor: tam bir yeniden yazım beklemeden, yerel önbellekleme ve arka planda yeniden doğrulama ile algılanan gecikmeyi azaltmak mümkün.