Çevrimdışı Uygulama — Metroda Bağlantı Kopunca Ne Gösterilir?
Önce şunu oku: Tarayıcı Önbelleği — Yeni Sürümü Yayına Aldın, Müşteri Neden Hâlâ Eskisini Görüyor?
30 saniyede özet
Service worker, bağlantı yokken de uygulamanın açılmasını sağlar. Ama her şeyi önbellekten vermek tehlikelidir: değişmeyen iskelet önbellekten gelir, bakiye ağdan istenir, para çevrimdışı gönderilmez.
Metroda tünele girdin, telefonun çekmiyor. Defterine sabah bir harita çizmiştin; ona bakmak hâlâ işe yarar. Ama sabah not ettiğin bakiye, artık yalnızca “sabahki” bakiyedir.
-
Bayt: Tünelde bankacılık uygulamasını açtım. Hiç açılmadı, tarayıcının dinozoru çıktı.
-
Sen: Her şeyi önbelleğe alsak? O zaman hep açılır.
-
Bayt: Açıldı... ama bakiye sabahki. Maaş yatmış, ekranda yok!
-
Bayt: Haritayı defterden okuyalım. Bakiyeyi ise ancak bağlanınca soralım.
Bağlantı yokken ne olur?
Normalde bir web uygulamasının her dosyası ağdan gelir. Bağlantı koptuğunda, uygulamanın kendisi bile açılmaz.
Bunu çözen şey bir service workerTarayıcıda sayfa ile ağ arasında duran betik. İstekleri yakalar; önbellekten mi ağdan mı cevap verileceğine karar verir.Sözlükte gör →’dır. Sayfa ile ağ arasında durur, her isteği yakalar ve önbellekten mi ağdan mı cevap verileceğine karar verir.
Kafam karıştı, daha basit anlat
Service worker, sayfanın isteklerini yakalayan bir kapı görevlisidir. Ağ yokken de cevap verebilir.
Service worker olmayan bir web uygulaması, bağlantı yokken açılmaya çalışılırsa ne olur?
Service worker nedir?
Her isteğe kendi kuralı
Service worker her cevabı önbelleğe alıyor ve ağ yokken önbellekten veriyor. Tünelde bakiyene bakıyorsun. Ekranda ne görürsün? Cevabı göster
Sabahki bakiyeyi, şimdiki gibi. Önbellek, kaydedildiği andaki cevabı verir. Arada yatan maaş görünmez ve ekranda bunun eski olduğuna dair hiçbir iz yoktur.
Adım adım oku
- Tünele girildi: bağlantı yok.
- Sabah çizdiğin harita hâlâ işe yarar.
- Sabahki bakiye notu: sabahki, bugünkü değil.
- Değişmeyeni defterden oku, parayı tünelden gönderme.
Çözüm, her isteğe türüne göre bir kural vermektir. uygulama iskeletiUygulamanın verisiz hâli: HTML, JS, CSS ve ikonlar. Herkes için aynıdır; çevrimdışı açılış için önbellekte tutulur.Sözlükte gör → herkes için aynıdır; önbellekten gelir. Kampanyalar gibi zararsız içerik de önbellekten gelir, ama yanında “eski olabilir” notuyla.
Bakiye yalnızca ağdan istenir; ağ yoksa “çevrimdışısın” denir. Havale ise çevrimdışı hiç gönderilmez ve bu açıkça söylenir.
Kafam karıştı, daha basit anlat
Değişmeyeni önbellekten ver. Kişisel olanı ağdan iste. Parayı çevrimdışı gönderme.
Çevrimdışıyken hangisini önbellekten göstermek en güvenlidir?
Kampanya listesi önbellekten gösterilecek. Hangisi doğru?
Kendin gör
Metroda bağlantı koptu
Tohum 349321⚡ Bağlantı yok (metro tüneli)
- Uygulamayı aç (HTML, JS, CSS)
- Kampanyalara bak
- Bakiyeye bak
- 500 TL havale gönder
✕ müşteriyi yanıltan sonuç: 0
Şu an ne oldu?
Service worker yok
Bağlantı yok. Okuyucu uygulamayı açıyor, kampanyalara ve bakiyesine bakıyor, bir havale deniyor.
Görevler0/3
Uygulama çevrimdışıyken hiç açılmasınaçık
İpucu
Service worker olmasın.
Eski bakiye güncelmiş gibi görünsünaçık
İpucu
Her şeyi önbellekle.
Uygulama açılsın, hiçbir şey olduğundan farklı görünmesinaçık
İpucu
İsteğin türüne göre kural.
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Service worker yok: dört isteğin dördü de tarayıcının hata sayfasına düştü.
- “Her şeyi önbellekle” seç. Uygulama açıldı, ama bakiye sabahki ve havale sessizce kuyruğa alındı.
- “İsteğin türüne göre kural” seç. Uygulama açıldı; bakiye ve havale için dürüstçe çevrimdışı olunduğu söylendi.
"Her şeyi önbellekle" kuralı açık. Okuyucu metroda bakiyesine bakıyor. Ne olur?
Çevrimdışıyken havale butonuna basıldı. En güvenli davranış hangisi?
Tuzaklar
Sürümü değiştirmeyi unutmak. Yeni sürümü yayınladın ama service worker eski iskeleti vermeye devam ediyor. Önbelleğe sürüm adı ver ve yeni sürümde eskisini sil.
Sessiz kuyruk. Bağlantı gelince kendiliğinden gönderilen bir havale, kullanıcı o arada yeniden denediyse iki kez gidebilir. Tekrar edilebilen her yazma işleminin sunucuda bir idempotencyAynı işlemin bir kez de on kez de çalışsa aynı sonucu vermesi. Dağıtık sistemde timeout aldığında işlemin yapılıp yapılmadığını bilemediğin için zorunludur.Sözlükte gör → anahtarı olmalı.
Ortak cihazda kişisel önbellek. Önbellek, çıkış yapıldıktan sonra da cihazda kalabilir. Kişisel yanıtları önbelleğe yazma; çıkışta önbelleği temizle.
Kafam karıştı, daha basit anlat
Önbelleğe sürüm ver, sessizce para gönderme, kişisel cevabı saklama.
Uygulamanın yeni sürümü yayınlandı ama bazı kullanıcılar hâlâ eskisini görüyor. En olası neden?
Derinleş · Mobil bankacılık: isteğin türüne göre çevrimdışı kural 3 dosya · ~70 satır · ilk okumada atlayabilirsin
Kendini sına
Service worker olmadan web uygulaması çevrimdışı açılmaz.
Çevrimdışı kuyruğa alınan istek bağlantı gelince gönderilecekse, sunucuda ne olmalı?
Aklında kalacak üç şey
- 1 Service worker olmayan bir web uygulaması, bağlantı yokken hiç açılmaz. Değişmeyen iskeleti önbellekte tutmak bunu çözer.
- 2 Eski veri ancak eski olduğu söylenerek gösterilir. Bakiye gibi kişisel ve parasal veri önbellekten güncel diye verilmez.
- 3 Para hareketi çevrimdışı sessizce kuyruğa alınmaz. Kullanıcıya gönderilmediği açıkça söylenir.
4 kart sonraki derste seni bekliyor