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ı servis çalışanı önbelleğe alma süresi sonu stratejilerinin avantajları ve dezavantajları.
Önbelleğe alma akışına genel bakış
Genel olarak, bir tarayıcı kaynak istediğinde aşağıdaki önbelleğe alma sırasını izler:
- 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.
- 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.
- 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.
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.
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. |
|
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. |
|
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. |
|
Önce önbelleğe al, ağ bağlantısına geç | İçerik kritik değildir ve performans kazancı için önbellekten yayınlanabilir ancak hizmet çalışanı zaman zaman güncellemeleri kontrol etmelidir. |
|
Yalnızca önbelleğe al | İçerik nadiren değişir. |
|
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. Kaynak/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ınan 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 uzun vadeli, orta vadeli ve kısa vadeli senaryoları tekrar inceleyeceğiz.
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ğ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 sunucu tarafına yönlendirilir.
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 isteğin ağdan yeni 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 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.