Cukup sering jika Anda ingin membatasi cache terkait berapa lama
item harus disimpan dalam cache, atau berapa banyak item yang harus disimpan
dalam cache. Workbox menyediakan fungsi ini melalui plugin workbox-expiration
yang memungkinkan Anda membatasi jumlah entri dalam cache dan / atau menghapus entri yang telah di-cache untuk jangka waktu yang lama.
Batasi Jumlah Entri Cache
Untuk membatasi jumlah entri yang disimpan dalam cache, Anda dapat menggunakan
opsi maxEntries
seperti berikut:
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,
}),
],
})
);
Dengan ini, Plugin akan ditambahkan ke rute ini. Setelah respons yang di-cache digunakan atau permintaan baru ditambahkan ke cache, plugin akan melihat cache yang dikonfigurasi dan memastikan bahwa jumlah entri yang di-cache tidak melebihi batas. Jika ya, entri terlama akan dihapus.
Batasi Usia Entri yang di-Cache
Untuk membatasi berapa lama permintaan di-cache, Anda dapat menentukan usia maksimum dalam detik menggunakan opsi maxAgeSeconds
seperti berikut:
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,
}),
],
})
);
Plugin akan memeriksa dan menghapus entri setelah setiap permintaan atau update cache.
Penggunaan Lanjutan
Jika ingin menggunakan logika habis masa berlaku yang terpisah dari modul Workbox
lainnya, Anda dapat melakukannya dengan
class
CacheExpiration
.
Untuk menerapkan batasan pada cache, Anda perlu membuat instance CacheExpiration
untuk cache yang ingin Anda kontrol seperti berikut:
import {CacheExpiration} from 'workbox-expiration';
const cacheName = 'my-cache';
const expirationManager = new CacheExpiration(cacheName, {
maxAgeSeconds: 24 * 60 * 60,
maxEntries: 20,
});
Setiap kali memperbarui entri yang di-cache, Anda perlu memanggil metode updateTimestamp()
agar usianya diperbarui.
await openCache.put(request, response);
await expirationManager.updateTimestamp(request.url);
Kemudian, setiap kali ingin mengakhiri kumpulan entri, Anda dapat memanggil
metode expireEntries()
yang akan menerapkan konfigurasi maxAgeSeconds
dan
maxEntries
.
await expirationManager.expireEntries();
Jenis
CacheExpiration
Class CacheExpiration
memungkinkan Anda menentukan masa berlaku dan / atau
batas jumlah respons yang disimpan dalam
Cache
.
Properti
-
konstruktor
void
Untuk membuat instance CacheExpiration baru, Anda harus menyediakan setidaknya salah satu dari properti
config
.Fungsi
constructor
terlihat seperti:(cacheName: string, config?: CacheExpirationConfig) => {...}
-
cacheName
string
Nama cache yang akan diberi batasan.
-
config
CacheExpirationConfig opsional
-
akan menampilkan
-
-
hapus
void
Menghapus penyimpanan objek IndexedDB yang digunakan untuk melacak metadata habis masa berlaku cache.
Fungsi
delete
terlihat seperti:() => {...}
-
akan menampilkan
Promise<void>
-
-
expireEntries
void
Entri kedaluwarsa untuk cache yang diberikan dan kriteria yang diberikan.
Fungsi
expireEntries
terlihat seperti:() => {...}
-
akan menampilkan
Promise<void>
-
-
isURLExpired
void
Dapat digunakan untuk memeriksa apakah URL telah kedaluwarsa atau tidak sebelum digunakan.
Ini memerlukan pencarian dari IndexedDB, jadi bisa jadi lambat.
Catatan: Metode ini tidak akan menghapus entri yang di-cache, memanggil
expireEntries()
untuk menghapus entri indexedDB dan Cache.Fungsi
isURLExpired
terlihat seperti:(url: string) => {...}
-
url
string
-
akan menampilkan
Promise<boolean>
-
-
updateTimestamp
void
Memperbarui stempel waktu untuk URL tertentu. Hal ini memastikan bahwa waktu menghapus entri berdasarkan entri maksimum, yang terakhir digunakan, aku akurat, atau saat masa berlakunya habis, stempel waktu tetap yang terbaru.
Fungsi
updateTimestamp
terlihat seperti:(url: string) => {...}
-
url
string
-
akan menampilkan
Promise<void>
-
ExpirationPlugin
Plugin ini dapat digunakan di workbox-strategy
untuk menerapkan
batas usia dan / atau jumlah permintaan yang di-cache secara rutin.
Ini hanya dapat digunakan dengan instance workbox-strategy
yang memiliki
kumpulan properti cacheName
khusus.
Dengan kata lain, pengujian ini tidak dapat digunakan untuk mengakhiri entri dalam strategi yang menggunakan
nama cache runtime default.
Setiap kali respons yang di-cache digunakan atau diperbarui, plugin ini akan melihat cache terkait dan menghapus respons lama atau tambahan.
Saat menggunakan maxAgeSeconds
, respons dapat digunakan satu kali setelah masa berlaku habis
karena pembersihan akhir masa berlaku tidak akan terjadi hingga setelah
respons yang di-cache telah digunakan. Jika respons memiliki header "Tanggal",
pemeriksaan habis masa berlaku ringan akan dilakukan dan respons tidak akan
segera digunakan.
Saat menggunakan maxEntries
, entri yang diminta baru-baru ini akan dihapus
dari cache terlebih dahulu.
Properti
-
konstruktor
void
Fungsi
constructor
terlihat seperti:(config?: ExpirationPluginOptions) => {...}
-
config
ExpirationPluginOptions opsional
-
akan menampilkan
-
-
deleteCacheAndMetadata
void
Ini adalah metode helper yang melakukan dua operasi:
- Menghapus semua instance Cache dasar yang terkait dengan instance plugin ini, dengan memanggil caches.delete() atas nama Anda.
- Menghapus metadata dari IndexedDB yang digunakan untuk melacak detail masa berlaku untuk setiap instance Cache.
Saat menggunakan masa berlaku cache, sebaiknya panggil metode ini daripada memanggil
caches.delete()
secara langsung, karena hal ini akan memastikan bahwa metadata IndexedDB juga dihapus dengan bersih dan instance IndexedDB yang terbuka dihapus.Perhatikan bahwa jika Anda tidak menggunakan masa berlaku cache untuk cache tertentu, memanggil
caches.delete()
dan meneruskan nama cache sudah cukup. Dalam kasus ini, tidak ada metode khusus Workbox yang diperlukan untuk pembersihan.Fungsi
deleteCacheAndMetadata
terlihat seperti:() => {...}
-
akan menampilkan
Promise<void>
ExpirationPluginOptions
Properti
-
matchOptions
CacheQueryOptions opsional
-
maxAgeSeconds
nomor opsional
-
maxEntries
nomor opsional
-
purgeOnQuotaError
boolean opsional