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

Hizmet çalışanı önbelleği ve HTTP önbelleği katmanlarında tutarlı veya farklı son kullanma mantığı kullanmanın avantajları ve dezavantajları.

Hizmet çalışanları ve PWA'lar modern web uygulamalarının standartları haline gelirken kaynak önbelleğe alma hiç olmadığı kadar karmaşık hale geldi. Bu makalede, tarayıcı önbelleğe alma ile ilgili genel bilgiler ele alınmaktadır. Bu bilgiler arasında şunlar yer alır:

  • Hizmet çalışanı önbelleğe alma ve HTTP önbelleğe alma arasındaki farklar ve kullanım alanları.
  • Normal HTTP önbelleğe alma stratejilerine kıyasla farklı hizmet çalışanı önbelleğe alma süresi sonu stratejilerinin avantajları ve dezavantajları.

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

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

  1. Servis çalışanı önbelleği: Servis çalışanı, kaynağın önbelleğinde olup olmadığını kontrol eder ve programlanmış önbelleğe alma stratejilerine göre kaynağı döndürüp döndürmeyeceğine karar verir. Bu işlemin otomatik olarak gerçekleşmediğini unutmayın. İstekler ağ yerine hizmet işçisinin önbelleğinden sunulsun diye hizmet işçinizde bir getirme etkinliği işleyicisi oluşturmanız ve ağ isteklerini durdurmanız gerekir.
  2. HTTP önbelleği (tarayıcı önbelleği olarak da bilinir): Kaynak HTTP önbelleği'nde bulunursa ve henüz süresi dolmadıysa tarayıcı, kaynağı otomatik olarak HTTP önbelleğinden kullanır.
  3. Sunucu tarafı: Hizmet çalışanı önbelleği veya HTTP önbelleği içinde hiçbir şey bulunamazsa tarayıcı, kaynağı istemek için ağa gider. Kaynak bir CDN'de önbelleğe alınmadıysa istek, kaynak sunucuya kadar gitmelidir.

Önbelleğe alma akışı

Katmanları önbelleğe alma

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

Hizmet çalışanları, ağ türündeki HTTP isteklerini durdurur ve tarayıcıya hangi kaynakların döndürülmesi gerektiğini belirlemek için bir önbelleğe alma stratejisi kullanır. Hizmet çalışanı önbelleği ve HTTP önbelleği aynı genel amaca hizmet eder ancak hizmet çalışanı önbelleği, tam olarak nelerin önbelleğe alındığı ve önbelleğe alma işleminin nasıl yapıldığı üzerinde ayrıntılı kontrol gibi daha fazla önbelleğe alma özelliği sunar.

Hizmet çalışanı önbelleğini kontrol etme

Hizmet çalışanları, etkinlik dinleyicileriyle (genellikle fetch etkinliği) HTTP isteklerini durdurur. Bu kod snippet'inde, önce önbelleğe alma stratejisinin mantığı gösterilmektedir.

Hizmet çalışanlarının HTTP isteklerini nasıl durdurduğunu gösteren bir şema

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

import {registerRoute} from 'workbox-routing';

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

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

Aşağıdaki tabloda, yaygın hizmet çalışanı önbelleğe alma stratejileri ve her stratejinin ne zaman yararlı olduğu özetlenmiştir.

Stratejiler Güncellilik gerekçesi Kullanım alanları
Yalnızca ağ İçerik her zaman güncel olmalıdır.
  • Ödemeler ve ödeme işlemleri
  • Bakiye ekstreleri
Ağ, önbelleğe geri dönüyor Yeni içeriğin yayınlanması tercih edilir. Ancak ağ başarısız olursa veya kararsızsa biraz eski içeriklerin yayınlanması kabul edilebilir.
  • Zamanında veri
  • Fiyatlar ve ücretler (sorumluluk reddi beyanları gereklidir)
  • Sipariş durumları
Stale-while-revalidate Önbelleğe alınmış içeriği hemen yayınlamanızda sakınca yoktur ancak gelecekte güncellenmiş önbelleğe alınmış içerik kullanılmalıdır.
  • Haber feed'leri
  • Ürün listeleme sayfaları
  • Mesajlar
Önce önbelleğe al, ağ bağlantısına geç İçerik kritik değildir ve performans kazancı için önbellekten sunulabilir ancak hizmet çalışanı zaman zaman güncellemeleri kontrol etmelidir.
  • Uygulama kabukları
  • Ortak kaynaklar
Yalnızca önbelleğe al İçerik nadiren değişir.
  • Statik içerik

Hizmet çalışanı önbelleğe almanın ek avantajları

Hizmet çalışanı önbelleğe alma, önbelleğe alma mantığının ayrıntılı kontrolüne ek olarak aşağıdakileri de sağlar:

  • Kaynağınız için daha fazla bellek ve depolama alanı: Tarayıcı, HTTP önbelleği kaynaklarını kaynak başına ayırır. Diğer bir deyişle, birden fazla alt alan adınız varsa bunların tümü aynı HTTP önbelleğini paylaşır. Kaynağınızın/alanınızın içeriğinin HTTP önbelleğinde uzun süre kalacağı garanti edilmez. Örneğin, bir kullanıcı tarayıcı ayarlarının kullanıcı arayüzünden manuel olarak temizleme yaparak veya bir sayfayı sert şekilde yeniden yükleyerek önbelleği temizleyebilir. Hizmet çalışanı önbelleği kullandığınızda, önbelleğe alınmış içeriğinizin önbelleğe alınmış kalması olasılığı çok daha yüksektir. Daha fazla bilgi için Kalıcı depolama başlıklı makaleyi inceleyin.
  • İstikrarsız ağlar veya çevrimdışı deneyimler için daha fazla esneklik: HTTP önbelleğiyle yalnızca iki seçenek vardır: Kaynak önbelleğe alınır veya alınmaz. Hizmet çalışanı önbelleğe alma özelliğiyle küçük "aksaklıkları" çok daha kolay azaltabilir ("yeniden doğrulama sırasında eski" stratejisiyle), tamamen çevrimdışı bir deneyim sunabilir ("Yalnızca önbelleğe alma" stratejisiyle) veya bu ikisinin ortasında bir şey (ör. sayfanın bazı bölümlerinin hizmet çalışanı önbelleğinden geldiği ve bazı bölümlerinin uygun olduğu durumlarda hariç tutulduğu özelleştirilmiş kullanıcı arayüzleri ("Yakalama işleyicisini ayarla" stratejisiyle)) sunabilirsiniz.

HTTP önbelleğe alma

Bir tarayıcı, bir web sayfasını ve ilgili kaynakları ilk kez yüklediğinde bu kaynakları HTTP önbelleğine 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 alma özelliğini kullanmak, 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 üst bilgileriyle HTTP önbelleği geçerlilik bitiş tarihini kontrol etme

Bir sunucu, kaynakla ilgili tarayıcı isteğine yanıt verirken tarayıcıya kaynağı ne kadar süreyle önbelleğe alması gerektiğini bildirmek için HTTP yanıt üstbilgilerini kullanır. Daha fazla bilgi edinmek için Yanıt üstbilgileri: Web sunucunuzu yapılandırma başlıklı makaleye göz atın.

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

HTTP önbelleğe alma, yalnızca zamana dayalı (TTL) kaynak geçerlilik süresi mantığıyla ilgilendiği için 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.

Önbellek geçerlilik bitiş tarihi mantığınızı tasarlama

Bu bölümde, hizmet çalışanı önbelleği ve HTTP önbelleği katmanlarında tutarlı son kullanma mantığı kullanmanın avantajları ve dezavantajları ile bu katmanlarda ayrı son kullanma mantığı kullanmanın avantajları ve dezavantajları açıklanmaktadır.

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

Tüm önbellek katmanları için tutarlı geçerlilik bitiş tarihi mantığı

Avantajları ve dezavantajları göstermek için uzun vadeli, orta vadeli ve kısa vadeli olmak üzere 3 senaryoya 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 Önbelleğe alma, ağa geri dönme Stale-while-revalidate Ağ, önbelleğe geri dö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 (Önbelleğe alma, ağa geri dönme)

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

Dezavantaj: Bu senaryoda, hizmet çalışanındaki önbelleğin süresi dolduğunda tarayıcı isteği her zaman sunucu tarafına ileteceğinden HTTP önbelleğe alma daha az değer sağlar.

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

  • Önbelleğe alınmış bir kaynak geçerli olduğunda (<= 1 gün): Hizmet çalışanı, önbelleğe alınmış kaynağı hemen döndürür ve kaynağı almak için ağa gider. Tarayıcı, kaynağın bir kopyasını HTTP önbelleğine alır ve bu kopyayı hizmet çalışanına döndürür.
  • Önbelleğe alınmış bir kaynağın süresi dolduğunda (> 1 gün): Hizmet çalışanı, önbelleğe alınmış kaynağı hemen döndürür ve kaynağı almak için ağa gider. Tarayıcının HTTP önbelleği, kaynağın bir kopyasını içermediğinden kaynak, sunucu tarafına gönderilir.

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

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

  • Önbelleğe alınmış bir kaynak geçerli olduğunda (<= 10 dakika): Hizmet çalışanı, kaynağı almak için ağa gider. Tarayıcı, kaynağın bir kopyasını HTTP önbelleğine alır ve bu nedenle sunucu tarafına gitmeden kaynağı hizmet çalışanına döndürür.
  • Önbelleğe alınan bir kaynağın süresi dolduğunda (> 10 dakika): Hizmet çalışanı, önbelleğe alınan kaynağı hemen döndürür ve kaynağı almak için ağa gider. Tarayıcının HTTP önbelleği, kaynağın bir kopyasını içermediğinden kaynak, sunucu tarafına gönderilir.

Dezavantaj: Orta vadeli önbelleğe alma senaryosuna benzer şekilde, hizmet çalışanı, sunucu tarafında en son kaynağı almak için HTTP önbelleğini geçersiz kılmak üzere ek önbelleği bozma mantığı gerektirir.

Tüm senaryolarda hizmet çalışanı

Tüm senaryolarda, ağ kararsız olduğunda hizmet çalışanı önbelleği önbelleğe alınmış kaynakları döndürmeye devam edebilir. Öte yandan, ağ kararsız veya kapalı olduğunda HTTP önbelleği güvenilir değildir.

Servis çalışanı önbelleği ve HTTP katmanlarında farklı önbellek geçerlilik bitiş tarihi mantığı

Avantajları ve dezavantajları göstermek için yine uzun vadeli, orta vadeli ve kısa vadeli senaryoları ele alacağı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 Önbelleğe alma, ağa geri dönme Stale-while-revalidate Ağ, önbelleğe geri dö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 (Önbelleğe alma, ağa geri dönme)

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

Artıları ve eksileri:

  • Avantaj: Hizmet çalışanı, önbelleğe alınmış kaynakları hemen döndürdüğü için kullanıcılar anında yanıt alır.
  • Avantaj: Hizmet çalışanı, önbelleğini ne zaman kullanacağı ve kaynakların yeni sürümlerini ne zaman isteyeceği konusunda daha ayrıntılı kontrol sahibidir.
  • Dezavantaj: İyi tanımlanmış bir hizmet çalışanı önbelleğe alma stratejisi gereklidir.

Senaryo: Ara depolama (yeniden doğrulama sırasında eski)

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

Artıları ve eksileri:

  • Avantaj: Hizmet çalışanı, önbelleğe alınmış kaynakları hemen döndürdüğü için 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 istekte ağdan yeni bir yanıt kullanılması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 geri döner)

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

Artıları ve eksileri:

  • Avantaj: Ağ kararsız olduğunda veya kapalı olduğunda hizmet çalışanı, önbelleğe alınmış kaynakları hemen döndürür.
  • Dezavantaj: Hizmet çalışanı, HTTP önbelleğini geçersiz kılmak ve "ağ öncelikli" istekler göndermek için ek önbelleği bozma işlemi gerektirir.

Sonuç

Önbelleğe alma senaryolarının kombinasyonunun karmaşıklığı göz önüne alındığında, tüm durumları kapsayan tek bir kural tasarlamak mümkün değildir. Ancak önceki bölümlerdeki bulgulara göre, önbellek stratejilerinizi tasarlarken göz önünde bulundurabileceğiniz birkaç öneri vardır:

  • Hizmet çalışanı önbelleğe alma mantığının, HTTP önbelleğe alma süresi sonu mantığıyla tutarlı olması gerekmez. Mümkünse hizmet çalışanına daha fazla kontrol vermek için hizmet çalışanında daha uzun bir geçerlilik bitiş tarihi mantığı kullanın.
  • HTTP önbelleğe alma hâlâ önemli bir rol oynasa da ağ kararsız veya kapalı olduğunda güvenilir değildir.
  • Hizmet çalışanı önbelleğe alma stratejinizin HTTP önbelleğiyle çakışmadan değerini sağladığından emin olmak için her kaynak için önbelleğe alma stratejilerinizi tekrar gözden geçirin.

Daha fazla bilgi