Service Worker önbelleğe alma ve HTTP önbelleğe alma

Service Worker önbelleği ve HTTP önbellek katmanlarında tutarlı veya farklı bir süre sonu mantığı kullanmanın avantajları ve dezavantajları.

Service Worker'lar ve PWA'lar modern web uygulamalarının standartları haline gelirken kaynakları önbelleğe alma süreci hiç olmadığı kadar karmaşık hale geldi. Bu makalede, aşağıdakiler de dahil, tarayıcı önbelleğine alma işleminin genel görünümü ele alınmaktadır:

  • Service Worker önbelleğine alma ile HTTP önbelleğe almanın kullanım alanları ve arasındaki farklar.
  • Normal HTTP önbelleğe alma stratejilerine kıyasla farklı hizmet çalışanı önbelleğe alma süre sonu stratejilerinin avantajları ve dezavantajları.

Önbelleğe alma akışına genel bakış

Genel olarak, tarayıcılar kaynak isteğinde bulunduğunda aşağıdaki önbelleğe alma sırasını izler:

  1. Service Worker önbelleği: Hizmet çalışanı, kaynağın önbelleğinde olup olmadığını kontrol eder ve programlanmış önbelleğe alma stratejilerine göre kaynağın kendisini döndürüp döndürmeyeceğini belirler. Bunun otomatik olarak gerçekleşmediğini unutmayın. İsteklerin ağ yerine hizmet çalışanı önbelleğinden sunulması için hizmet çalışanınızda bir getirme etkinlik işleyicisi oluşturmanız ve ağ isteklerine müdahale etmeniz gerekir.
  2. HTTP önbelleği (tarayıcı önbelleği olarak da bilinir): Kaynak HTTP Önbelleği'nde bulunduysa ve henüz süresi dolmadıysa tarayıcı otomatik olarak HTTP önbelleğindeki kaynağı kullanır.
  3. Sunucu tarafı: Hizmet çalışanı önbelleğinde veya HTTP önbelleğinde hiçbir şey bulunamazsa tarayıcı, kaynağı istemek için ağa gider. Kaynak CDN'de önbelleğe alınmamışsa isteğin tamamen kaynak sunucuya geri gitmesi gerekir.

Önbelleğe alma akışı

Katmanları önbelleğe alma

Hizmet çalışanı önbelleğe alma

Service Worker, ağ türü HTTP isteklerine müdahale eder ve tarayıcıya hangi kaynakların döndürülmesi gerektiğini belirlemek için önbelleğe alma stratejisi kullanır. Service Worker önbelleği ile HTTP önbelleği aynı genel amaca hizmet eder ancak Service Worker önbelleği, tam olarak neyin önbelleğe alındığı ve önbelleğe alma işleminin nasıl yapıldığı üzerinde daha ayrıntılı kontrol gibi daha fazla önbelleğe alma özelliği sunar.

Service Worker önbelleğini kontrol etme

Service Worker, HTTP isteklerine etkinlik işleyiciler (genellikle fetch etkinliği) ile müdahale eder. Bu kod snippet'i, Önbellek Önceliği önbelleğe alma stratejisinin mantığını göstermektedir.

Hizmet çalışanlarının HTTP isteklerine nasıl müdahale ettiğini gösteren şema

Tekerleğin yeniden icat edilmesini önlemek için Workbox'ı kullanmanız önemle tavsiye edilir. Örneğin, kaynak URL yollarını tek bir normal ifade kodu satırıyla kaydedebilirsiniz.

import {registerRoute} from 'workbox-routing';

registerRoute(new RegExp('styles/.*\\.css'), callbackHandler);

Hizmet çalışanı önbelleğe alma stratejileri ve kullanım alanları

Sonraki tabloda, yaygın olarak kullanılan Service Worker önbelleğe alma stratejileri ve her bir stratejinin ne zaman yararlı olduğu özetlenmiştir.

Stratejiler Güncellik gerekçesi Kullanım alanları
Yalnızca ağ İçeriğin her zaman güncel olması gerekir.
  • Ödemeler ve ödeme işlemleri
  • Bakiye ekstreleri
Ağın önbelleğe alınması Yeni içeriğin sunulması tercih edilir. Bununla birlikte, ağ başarısız olursa veya kararsızsa, biraz eski içerik yayınlamak kabul edilebilir.
  • Doğru zamanda sağlanan veriler
  • Fiyatlar ve ücretler (sorumluluk reddi beyanları gereklidir)
  • Sipariş durumları
Eski hale getirme sırasında yeniden doğrulama Önbelleğe alınan içeriği hemen sunabilirsiniz ancak güncellenen önbelleğe alınmış içerik gelecekte kullanılmalıdır.
  • Haber özet akışları
  • Ürün listeleme sayfaları
  • Mesajlar
Önce önbelleğe alın, ağa geri dönün İçerik kritik değildir ve performans artışları için önbellekten sunulabilir ancak hizmet çalışanının zaman zaman güncellemeleri kontrol etmesi gerekir.
  • Uygulama kabukları
  • Ortak kaynaklar
Yalnızca önbellek İçerik nadiren değişir.
  • Statik içerik

Service Worker önbelleğe almanın ek avantajları

Service Worker önbelleğe alma, önbelleğe alma mantığının ayrıntılı denetimine ek olarak şunları da sağlar:

  • Kaynağınız için daha fazla bellek ve depolama alanı: Tarayıcı, HTTP önbellek kaynaklarını kaynak bazında ayırır. Başka bir deyişle, birden çok alt alanınız varsa hepsi aynı HTTP önbelleğini paylaşır. Kaynağınızın/alanınızın içeriğinin HTTP önbelleğinde uzun süre kalacağının garantisi yoktur. Örneğin, kullanıcı bir tarayıcının ayarlar kullanıcı arayüzünden manuel olarak temizleyerek veya bir sayfada sabit yeniden yüklemeyi tetikleyerek önbelleği temizleyebilir. Service Worker önbelleğiyle, önbelleğe alınan içeriğinizin önbelleğe alınma olasılığı çok daha yüksektir. Daha fazla bilgi edinmek için Kalıcı depolama bölümüne bakın.
  • Kesintili ağlar veya çevrimdışı deneyimler ile daha fazla esneklik: HTTP önbelleğinde yalnızca ikili bir seçeneğe sahip olursunuz: kaynak önbelleğe alınır veya alınmaz. Service Worker'ı önbelleğe alma sayesinde küçük "kesintileri" çok daha kolay bir şekilde azaltabilirsiniz ("eski yeniden doğrulama" stratejisiyle), eksiksiz bir çevrimdışı deneyim ("Yalnızca önbellek" stratejisiyle) ve hatta uygun durumlarda sayfanın bazı kısımlarının hizmet çalışanı önbelleğinden geldiği ve bazı bölümlerinin çıkarıldığı ("yakalayıcıyı ayarla" stratejisiyle) özelleştirilmiş kullanıcı arayüzleri gibi bir seçenek bile sağlayabilirsiniz.

HTTP önbelleğe alma

Bir tarayıcı bir web sayfasını ve ilgili kaynakları ilk kez yüklediğinde bu kaynakları HTTP önbelleğinde depolar. HTTP önbelleği, son kullanıcı tarafından açıkça devre dışı bırakılmadığı sürece genellikle tarayıcılar tarafından otomatik olarak etkinleştirilir.

HTTP önbelleğe almanın kullanılması, bir kaynağın ne zaman ve ne kadar süreyle önbelleğe alınacağını belirlemek için sunucuya güvenmek anlamına gelir.

HTTP yanıt başlıklarıyla HTTP önbelleği süre sonunu kontrol etme

Sunucu, bir kaynak için tarayıcı isteğine yanıt verdiğinde, tarayıcıya kaynağı ne kadar süreyle önbelleğe alması gerektiğini bildirmek için HTTP yanıt başlıklarını kullanır. Daha fazla bilgi edinmek için Yanıt başlıkları: web sunucunuzu yapılandırma bölümüne bakın.

HTTP önbelleğe alma stratejileri ve kullanım alanları

HTTP önbelleğe alma işlemi, yalnızca zamana dayalı (TTL) kaynak kullanım süresi mantığıyla çalıştığı için HTTP önbelleğe alma, hizmet çalışanı önbelleğe alma işleminden çok daha basittir. HTTP önbelleğe alma stratejileri hakkında daha fazla bilgi edinmek için Hangi yanıt başlığı değerlerini kullanmalısınız? ve Özet bölümlerine bakın.

Önbelleğinizin süre sonu mantığını tasarlama

Bu bölümde, Service Worker önbelleği ve HTTP önbellek katmanlarında tutarlı bir süre sonu mantığı kullanmanın avantajları ve dezavantajlarının yanı sıra, bu katmanlarda ayrı süre sonu mantığı kullanmanın avantajları ve dezavantajları açıklanmaktadır.

Aşağıdaki Arıza, hizmet çalışanı önbelleğe almanın ve HTTP önbelleğe almanın farklı senaryolarda nasıl çalıştığını gösterir:

Tüm önbellek katmanları için tutarlı bir süre sonu mantığı

Artıları ve eksileri göstermek için 3 senaryoya göz atacağız: uzun vadeli, orta vadeli ve kısa vadeli.

Senaryolar Uzun süreli önbelleğe alma Orta vadeli önbelleğe alma Kısa süreli önbelleğe alma
Hizmet çalışanı önbelleğe alma stratejisi Önbellek, ağa geri dönülüyor Eski-yeniden doğrula Ağ önbelleğe alınıyor
Hizmet çalışanı önbelleği TTL'si 30 gün 1 gün 10 dk.
HTTP önbelleği maksimum yaşı 30 gün 1 gün 10 dk.

Senaryo: Uzun süreli önbelleğe alma (Önbellek, ağa geri dönülüyor)

  • Önbelleğe alınan bir kaynak geçerli olduğunda (<= 30 gün): Service Worker önbelleğe alınmış kaynağı ağa gitmeden hemen döndürür.
  • Önbelleğe alınan bir kaynağın süresi dolduğunda (> 30 gün): Hizmet çalışanı, kaynağı getirmek için ağa gider. Tarayıcının HTTP önbelleğinde kaynağın bir kopyası olmadığından kaynak, sunucu tarafına gider.

Dezavantajı: Bu senaryoda, HTTP önbelleğe alma işlemi daha az değer sağlar. Bunun nedeni, Service Worker'da önbelleğin süresi dolduğunda tarayıcı isteği her zaman sunucu tarafına ileteceğidir.

Senaryo: Orta vadeli önbelleğe alma (Yeniden doğrulama sırasında eski)

  • Önbelleğe alınan bir kaynak geçerli olduğunda (<= 1 gün): Service Worker önbelleğe alınan kaynağı hemen döndürür ve kaynağı getirmek için ağa gider. Tarayıcı, HTTP önbelleğinde kaynağın bir kopyasını bulundurur ve bu kopyayı Service Worker'a döndürür.
  • Önbelleğe alınan bir kaynağın süresi dolduğunda (> 1 gün): Service Worker önbelleğe alınan kaynağı hemen geri getirir ve kaynağı getirmek için ağa gider. Tarayıcının HTTP önbelleğinde kaynağın bir kopyası yoktur. Bu nedenle kaynağı getirmek için sunucu tarafına gider.

Dezavantajı: Service Worker, "yeniden doğrulama" adımından en iyi şekilde yararlanabilmek için HTTP önbelleğini geçersiz kılmak üzere ek önbellek bozma gerektirir.

Senaryo: Kısa süreli önbelleğe alma (Ağ önbelleğe alma)

  • Önbelleğe alınan bir kaynak geçerli olduğunda (<= 10 dakika): Hizmet çalışanı, kaynağı getirmek için ağa gider. Tarayıcının bir kopyası HTTP önbelleğinde bulunur. Böylece, bu kopyayı sunucu tarafına gitmeden Service Worker'a döndürür.
  • Önbelleğe alınan bir kaynağın süresi dolduğunda (> 10 dakika): Service Worker önbelleğe alınan kaynağı hemen döndürür ve kaynağı getirmek için ağa gider. Tarayıcının HTTP önbelleğinde kaynağın bir kopyası yoktur. Bu nedenle kaynağı getirmek için sunucu tarafına gider.

Dezavantaj: Orta vadeli önbelleğe alma senaryosuna benzer şekilde Service Worker, en güncel kaynağı sunucu tarafından getirmek amacıyla HTTP önbelleğini geçersiz kılmak için ek önbellek bozan mantığa ihtiyaç duyar.

Tüm senaryolarda hizmet çalışanı

Tüm senaryolarda, hizmet çalışanı önbelleği ağ kararsız olduğunda önbelleğe alınan kaynakları yine de döndürebilir. Diğer yandan, HTTP önbelleği ağ kararsızsa veya çalışmıyorken güvenilir değildir.

Hizmet çalışanı önbelleğinde ve HTTP katmanlarında farklı önbellek süre sonu mantığı

Artılarını ve eksilerini göstermek için yine uzun, orta ve kısa vadeli senaryolara göz atacağız.

Senaryolar Uzun süreli önbelleğe alma Orta vadeli önbelleğe alma Kısa süreli önbelleğe alma
Hizmet çalışanı önbelleğe alma stratejisi Önbellek, ağa geri dönülüyor Eski-yeniden doğrula Ağ önbelleğe alınıyor
Hizmet çalışanı önbelleği TTL'si 90 gün 30 gün 1 gün
HTTP önbelleği maksimum yaşı 30 gün 1 gün 10 dk.

Senaryo: Uzun süreli önbelleğe alma (Önbellek, ağa geri dönülüyor)

  • Önbelleğe alınmış bir kaynak hizmet çalışanı önbelleğinde geçerli olduğunda (<= 90 gün): Hizmet çalışanı, önbelleğe alınan kaynağı hemen döndürür.
  • Önbelleğe alınan bir kaynağın hizmet çalışanı önbelleğinde süresi dolduğunda (> 90 gün): Hizmet çalışanı, kaynağı getirmek için ağa gider. Tarayıcı, HTTP önbelleğinde kaynağın bir kopyasına sahip olmadığından sunucu tarafına gider.

Artıları ve eksileri:

  • Avantajı: Service Worker, önbelleğe alınan kaynakları hemen döndürdüğünde kullanıcılar anında yanıt alır.
  • Avantajı: Service Worker, önbelleğinin ne zaman kullanılacağı ve kaynakların yeni sürümlerinin ne zaman isteneceği konusunda daha hassas bir denetime sahiptir.
  • Dezavantaj: İyi tanımlanmış bir hizmet çalışanı önbelleğe alma stratejisi gereklidir.

Senaryo: Orta vadeli önbelleğe alma (Yeniden doğrulama sırasında eski)

  • Önbelleğe alınan bir kaynak hizmet çalışanı önbelleğinde geçerli olduğunda (<= 30 gün): Hizmet çalışanı, önbelleğe alınan kaynağı hemen döndürür.
  • Önbelleğe alınan bir kaynağın hizmet çalışanı önbelleğinde süresi dolduğunda (> 30 gün): Hizmet çalışanı, kaynağın ağına gider. Tarayıcının HTTP önbelleğinde kaynağın bir kopyası olmadığından bu kaynak, sunucu tarafına gider.

Artıları ve eksileri:

  • Avantajı: Service Worker, önbelleğe alınan kaynakları hemen döndürdüğünde kullanıcılar anında yanıt alır.
  • Avantajı: Hizmet çalışanı, "arka planda" gerçekleşen yeniden doğrulama sayesinde belirli bir URL için sonraki isteğin ağdan güncel bir yanıt kullanmasını sağlayabilir.
  • Dezavantaj: İyi tanımlanmış bir hizmet çalışanı önbelleğe alma stratejisi gereklidir.

Senaryo: Kısa süreli önbelleğe alma (Ağ önbelleğe alma)

  • Önbelleğe alınan bir kaynak hizmet çalışanı önbelleğinde geçerli olduğunda (<= 1 gün): Hizmet çalışanı, kaynağın ağına gider. Varsa, tarayıcı kaynağı HTTP önbelleğinden döndürür. Ağ kapalıysa Service Worker, kaynağı Service Worker önbelleğinden
  • Önbelleğe alınan bir kaynağın hizmet çalışanı önbelleğinde süresi dolduğunda (> 1 gün): Hizmet çalışanı, kaynağı getirmek için ağa gider. Tarayıcı, HTTP önbelleğindeki önbelleğe alınmış sürümün süresi dolduğunda kaynakları ağ üzerinden getirir.

Artıları ve eksileri:

  • Avantajı: Ağ kararsız veya çalışmıyor olduğunda Service Worker, önbelleğe alınan kaynakları hemen döndürür.
  • Dezavantajı: Hizmet çalışanı, HTTP Önbelleğini geçersiz kılmak ve "Önce ağ" isteğinde bulunmak için ek önbellek bozma gerektirir.

Sonuç

Önbelleğe alma senaryolarının kombinasyonunun karmaşıklığı göz önünde bulundurulduğunda, tüm durumları kapsayan tek bir kural tasarlamak mümkün değildir. Ancak önceki bölümlerde yer alan bulgulara dayalı olarak, önbellek stratejilerinizi tasarlarken bakabileceğiniz birkaç öneri bulunmaktadır:

  • Service Worker önbelleğe alma mantığının, HTTP önbelleğe alma süre sonu mantığıyla tutarlı olması gerekmez. Mümkünse Service Worker'a daha fazla denetim vermek için Service Worker'da daha uzun süre sonu mantığı kullanın.
  • HTTP önbelleğe alma önemli bir rol oynamaya devam etse de ağ kararsız veya kapalı olduğunda güvenilir değildir.
  • Service Worker önbelleğe alma stratejinizin, HTTP önbelleğiyle çakışmadan değer sağladığından emin olmak için her kaynakla ilgili önbelleğe alma stratejilerinizi yeniden gözden geçirin.

Daha fazla bilgi