diff --git a/src/serviceworker/mod.ts b/src/serviceworker/mod.ts index 0df7955..ec44acb 100644 --- a/src/serviceworker/mod.ts +++ b/src/serviceworker/mod.ts @@ -84,8 +84,9 @@ if (IS_SW) { event.waitUntil(openPreCache()) }) - self.addEventListener('activate', () => { - //TODO handle activation + self.addEventListener('activate', (event) => { + // Clear old caches to reduce storage usage + event.waitUntil(clearOldCaches()) }) self.addEventListener('fetch', (event) => { @@ -252,6 +253,23 @@ async function openPreCache() { return { cache, version, preCachedUrls } } +async function clearOldCaches() { + // Clear memory + memory.clear() + + // List all caches by their names. + const names = await caches.keys() + const preCacheName = await swStorage.getItem('$sw.pre-cache.version') + const dynCacheName = await swStorage.getItem('$sw.dyn-cache.version') + + for (const name of names) { + // If a cache's name is the current name, delete it. + if (name === preCacheName) continue + if (name == dynCacheName) continue + caches.delete(name) + } +} + export function main() { console.assert() }