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 id ile normalize edilir: posts: Record<id, Post>, users: Record<id, User>, akış ise feedIds: 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 useInfiniteQuery bu 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", sabit width/height veya aspect-ratio ile (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", öğelerde role="article", yüklenirken aria-busy="true"; klavye kullanıcıları için "daha fazla yükle" butonu alternatifi.
  1. Bir autocomplete (typeahead) arama bileşenini nasıl tasarlarsınız?ZorFrontend Sistem TasarımıFrontend
  2. Bir frontend sistem tasarımı mülakatına nasıl yaklaşırsınız? Hangi adımları izlersiniz?KolayFrontend Sistem TasarımıFrontend
  3. Offline-first çalışan bir web uygulamasını (ör. not alma uygulaması) nasıl tasarlarsınız?ZorFrontend Sistem TasarımıFrontend
  4. Çok dilli (i18n) bir frontend uygulamasını nasıl tasarlarsınız?OrtaFrontend Sistem TasarımıFrontend
  5. Micro-frontend mimarisi nedir? Ne zaman tercih edilir, dezavantajları nelerdir?ZorFrontend Sistem TasarımıFrontend
  6. Büyük bir React uygulamasında state management mimarisini nasıl kurgularsınız?OrtaFrontend Sistem TasarımıFrontend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle