Facebook/Twitter benzeri sonsuz kaydırmalı (infinite scroll) bir haber akışını nasıl tasarlarsınız?
Cevap
Ana parçalar: cursor tabanlı pagination, sayfanın sonunu izleyen bir IntersectionObserver, uzun listeler için virtualization ve normalize edilmiş bir client store.
API
Offset yerine cursor kullanırım; akışa yeni gönderiler eklendikçe offset kayar ve tekrar/eksik gönderi olur.
GET /api/feed?cursor=abc123&limit=20
-> { items: [...], nextCursor: "def456" }Veri modeli
- Gönderiler
idile normalize edilir:posts: Record<id, Post>,users: Record<id, User>, akış isefeedIds: string[]. - Böylece bir kullanıcı adını güncellemek tüm gönderilerde tek yerden yansır.
Yükleme
- Listenin sonuna görünmez bir sentinel eleman konur, görünür olduğunda bir sonraki sayfa çekilir (bir sayfa önceden,
rootMargin: "800px"ile). - TanStack Query
useInfiniteQuerybu deseni hazır sunar.
Performans
- Binlerce gönderide DOM şişer: virtualization (TanStack Virtual) ile sadece görünen öğeler render edilir; değişken yükseklikleri ölçmek gerekir.
- Görseller
loading="lazy", sabitwidth/heightveyaaspect-ratioile (CLS önlenir). - Like gibi etkileşimlerde optimistic update, hata olursa geri al.
Diğer konular
- Yeni gönderiler: polling/SSE ile "12 yeni gönderi" bandı göster, kullanıcının okuduğu yeri aniden kaydırma.
- Scroll restoration: detaydan geri dönünce aynı pozisyon.
- Erişilebilirlik:
role="feed", öğelerderole="article", yüklenirkenaria-busy="true"; klavye kullanıcıları için "daha fazla yükle" butonu alternatifi.
İlgili Frontend Sistem Tasarımı soruları
- Bir autocomplete (typeahead) arama bileşenini nasıl tasarlarsınız?
- Bir frontend sistem tasarımı mülakatına nasıl yaklaşırsınız? Hangi adımları izlersiniz?
- Offline-first çalışan bir web uygulamasını (ör. not alma uygulaması) nasıl tasarlarsınız?
- Çok dilli (i18n) bir frontend uygulamasını nasıl tasarlarsınız?
- Micro-frontend mimarisi nedir? Ne zaman tercih edilir, dezavantajları nelerdir?
- Büyük bir React uygulamasında state management mimarisini nasıl kurgularsınız?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.