Öğelerin önbellekte ne kadar süreyle saklanmasına izin verileceği veya önbellekte kaç öğenin tutulacağı açısından önbelleğe kısıtlamalar uygulamak oldukça yaygındır. Workbox, önbellekte bulunan girişlerin sayısını sınırlamanıza ve / veya uzun süredir önbelleğe alınmış girişleri kaldırmanıza olanak tanıyan workbox-expiration
eklentisi aracılığıyla bu işlevi sağlar.
Önbellek Girişlerinin Sayısı
Bir önbellekte depolanan girişlerin sayısını kısıtlamak için maxEntries
seçeneğini aşağıdaki gibi kullanabilirsiniz:
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';
registerRoute(
({request}) => request.destination === 'image',
new CacheFirst({
cacheName: 'image-cache',
plugins: [
new ExpirationPlugin({
maxEntries: 20,
}),
],
})
);
Bu işlemle eklenti bu yola eklenir. Önbelleğe alınmış bir yanıt kullanıldıktan veya önbelleğe yeni bir istek eklendikten sonra, eklenti yapılandırılmış önbelleğe bakar ve önbelleğe alınmış girişlerin sayısının sınırı aşmadığından emin olur. Bu durumda en eski girişler kaldırılır.
Önbelleğe Alınan Girişlerin Yaşını Kısıtlama
Bir isteğin ne kadar süre boyunca önbelleğe alınacağını kısıtlamak için maxAgeSeconds
seçeneğini kullanarak saniye cinsinden bir maksimum yaş tanımlayabilirsiniz.
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';
registerRoute(
({request}) => request.destination === 'image',
new CacheFirst({
cacheName: 'image-cache',
plugins: [
new ExpirationPlugin({
maxAgeSeconds: 24 * 60 * 60,
}),
],
})
);
Eklenti, her istek veya önbelleğe alma güncellemesinden sonra girişleri kontrol edip kaldırır.
İleri Seviye Kullanım
Süre sonu mantığını diğer Workbox modüllerinden ayrı olarak kullanmak istiyorsanız bunu CacheExpiration
sınıfıyla yapabilirsiniz.
Bir önbelleğe kısıtlama uygulamak için, kontrol etmek istediğiniz önbelleğe aşağıdaki gibi bir CacheExpiration
örneği oluşturursunuz:
import {CacheExpiration} from 'workbox-expiration';
const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
maxAgeSeconds: 24 * 60 * 60,
maxEntries: 20,
});
Önbelleğe alınmış bir girişi her güncellediğinizde, yaşını güncellemek için updateTimestamp()
yöntemini çağırmanız gerekir.
await openCache.put(request, response);
await expirationManager.updateTimestamp(request.url);
Ardından, bir giriş grubunun süresinin dolmasını istediğiniz zaman maxAgeSeconds
ve maxEntries
yapılandırmasını zorunlu kılacak expireEntries()
yöntemini çağırabilirsiniz.
await expirationManager.expireEntries();
Türler
CacheExpiration
CacheExpiration
sınıfı, Cache
içinde depolanan yanıtların sayısı için bir geçerlilik süresi ve / veya sınır belirlemenize olanak tanır.
Özellikler
-
oluşturucu
geçersiz
Yeni bir CacheExpiration örneği oluşturmak için
config
özelliklerinden en az birini sağlamanız gerekir.constructor
işlevi şu şekilde görünür:(cacheName: string, config?: CacheExpirationConfig) => {...}
-
cacheName
dize
Kısıtlamaların uygulanacağı önbelleğin adı.
-
yapılandırma
CacheExpirationConfig isteğe bağlı
-
returns
-
-
delete
geçersiz
Önbellek geçerlilik bitiş meta verilerini takip etmek için kullanılan IndexedDB nesne deposunu kaldırır.
delete
işlevi şu şekilde görünür:() => {...}
-
returns
Promise<void>
-
-
expireEntries
geçersiz
Belirtilen önbellek ve ölçütlere göre girişlerin süresini sonlandırır.
expireEntries
işlevi şu şekilde görünür:() => {...}
-
returns
Promise<void>
-
-
isURLExpired
geçersiz
Bir URL'nin geçerlilik süresinin dolup dolmadığını kontrol etmek için kullanılabilir.
Bu işlem için IndexedDB'de arama yapılması gerekir. Bu nedenle işlem yavaş olabilir.
Not: Bu yöntem, önbelleğe alınan girişi kaldırmaz. indexedDB ve önbellek girişlerini kaldırmak için
expireEntries()
çağrısı yapın.isURLExpired
işlevi şu şekilde görünür:(url: string) => {...}
-
url
dize
-
returns
Promise<boolean>
-
-
updateTimestamp
geçersiz
Belirtilen URL'nin zaman damgasını güncelleyin. Bu sayede, maksimum girişe göre girişleri kaldırırken en son kullanılan girişin doğru olduğundan veya süre sonu geldiğinde zaman damgasının güncel olduğundan emin olabilirsiniz.
updateTimestamp
işlevi şu şekilde görünür:(url: string) => {...}
-
url
dize
-
returns
Promise<void>
-
ExpirationPlugin
Bu eklenti, önbelleğe alınan isteklerin yaşı ve / veya sayısıyla ilgili bir sınırı düzenli olarak uygulamak için workbox-strategy
içinde kullanılabilir.
Yalnızca özel cacheName
mülk kümesi içeren workbox-strategy
örnekleriyle kullanılabilir.
Diğer bir deyişle, varsayılan çalışma zamanı önbelleği adını kullanan stratejideki girişlerin süresinin dolması için kullanılamaz.
Önbelleğe alınmış bir yanıt kullanıldığında veya güncellendiğinde bu eklenti, ilişkili önbelleğe bakar ve eski veya fazla yanıtları kaldırır.
maxAgeSeconds
kullanıldığında, yanıtlar geçerlilik süresi dolduktan sonra bir kez kullanılabilir. Bunun nedeni, geçerlilik süresi sonu temizliği, önbelleğe alınan yanıt kullanıldıktan sonra gerçekleşmesidir. Yanıtta "Date" başlığı varsa hafif bir son kullanma tarihi kontrolü yapılır ve yanıt hemen kullanılmaz.
maxEntries
kullanıldığında, en son istenen giriş önce önbellekten kaldırılır.
Özellikler
-
oluşturucu
geçersiz
constructor
işlevi şu şekilde görünür:(config?: ExpirationPluginOptions) => {...}
-
yapılandırma
ExpirationPluginOptions isteğe bağlı
-
returns
-
-
deleteCacheAndMetadata
geçersiz
Bu, iki işlem gerçekleştiren bir yardımcı yöntemdir:
- Sizin adınıza caches.delete() işlevini çağırarak bu eklenti örneğiyle ilişkili temel önbelleğe alma örneklerinin tümünü siler.
- Her önbellek örneğinin geçerlilik bitiş tarihi ayrıntılarını takip etmek için kullanılan meta verileri IndexedDB'den siler.
Önbelleğin geçerlilik süresinin sona ermesi özelliği kullanılırken bu yöntemin çağrılması,
caches.delete()
yönteminin doğrudan çağrılmasından daha iyidir. Bu yöntem, IndexedDB meta verilerinin de düzgün bir şekilde kaldırılmasını ve açık IndexedDB örneklerinin silinmesini sağlar.Belirli bir önbelleğe yönelik önbelleğe alma süresini kullanmıyorsanız
caches.delete()
çağrısını yapıp önbelleğin adını iletmeniz yeterlidir. Bu durumda, temizlik için Workbox'a özel bir yönteme gerek yoktur.deleteCacheAndMetadata
işlevi şu şekilde görünür:() => {...}
-
returns
Promise<void>
ExpirationPluginOptions
Özellikler
-
matchOptions
CacheQueryOptions isteğe bağlı
-
maxAgeSeconds
number isteğe bağlı
-
maxEntries
number isteğe bağlı
-
purgeOnQuotaError
boole isteğe bağlı