Offline-first çalışan bir web uygulamasını (ör. not alma uygulaması) nasıl tasarlarsınız?
Cevap
Offline-first'te veri önce lokalde (IndexedDB) okunur ve yazılır, ağ ise arka planda senkronizasyon için kullanılır. UI ağ durumundan bağımsız olarak anında tepki verir.
Parçalar
- Service Worker: Uygulama kabuğunu (HTML/JS/CSS) ve statik varlıkları önbelleğe alır (Workbox ile).
- IndexedDB: Asıl veri deposu (Dexie gibi bir sarmalayıcıyla).
- Outbox (bekleyen işlemler kuyruğu): Offline yapılan değişiklikler
{id, op, payload, timestamp}olarak saklanır, bağlantı gelince sırayla sunucuya gönderilir. - Senkronizasyon katmanı: Sunucudan değişiklikleri çekme (
since=lastSyncAt), çakışma çözme.
Önbellek stratejileri
| Strateji | Kullanım |
|---|---|
| Cache first | Hash'li statik dosyalar, fontlar |
| Network first | Güncelliği önemli HTML/API |
| Stale-while-revalidate | Avatar, sık değişmeyen API cevapları |
Çakışma çözümü
- Last-write-wins (basit, veri kaybı riski).
- Alan bazlı birleştirme veya versiyon numarası ile çakışmayı kullanıcıya gösterme.
- Eşzamanlı düzenleme gerekiyorsa CRDT (Yjs, Automerge).
Dikkat edilecekler
navigator.onLinegüvenilir değildir; gerçek bağlantıyı istek sonucu belirler.- Background Sync API sadece Chromium tabanlı tarayıcılarda vardır; diğerlerinde uygulama açılınca/
onlineevent'inde kuyruğu boşaltın. - Depolama kotası ve tarayıcının veriyi silmesi:
navigator.storage.persist()isteyin. - Service worker güncellemesi: yeni sürüm hazır olduğunda kullanıcıya "yenile" bildirimi gösterin.
- UI'da senkronizasyon durumunu gösterin (kaydedildi / bekliyor / hata).
İ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?
- Ç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?
- Şirket genelinde kullanılacak bir design system / component library nasıl kurarsı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.