- From: Thomas Steiner <notifications@github.com>
- Date: Wed, 20 Dec 2017 14:00:17 +0000 (UTC)
- To: w3c/ServiceWorker <ServiceWorker@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/ServiceWorker/issues/863/353070261@github.com>
@jakearchibald, as a response to your [comment](https://github.com/w3c/ServiceWorker/issues/863#issuecomment-352828121), here is a still *raw* sketch of an API of a fictive `Cache.has(request, {options})` that would return a likewise fictive `CacheItem` object: ```javascript // Create `CacheItem` foo at timestamp 1000 await cache.add('foo'); // Get statistics about the never matched `CacheItem` await cache.has('foo'); // returns `{key: 'foo', timeCached: 1000, timeMatched: Infinity}` // Get statistics about a non-existent `CacheItem` await cache.has('bar'); // returns `undefined` // Use `CacheItem` foo at timestamp 2000 await cache.match('foo'); // Get statistics about the now matched (=used) `CacheItem` await cache.has('foo'); // returns `{key: 'foo', timeCached: 1000, timeMatched: 2000}` ``` This would allow for relatively simple to implement cache replacement policies that are independent of Indexed Database, like, for example, Least Recently Used: ```javascript const MAX_CACHE_ITEMS = 5; const cache = await caches.open('lru-cache'); const addToCache = async (cache, url) => { const keys = await cache.keys(); if (keys.length < MAX_CACHE_ITEMS) { return await cache.add(url); } const cacheItems = await Promise.all( keys.map(async key => await cache.has(key)) ); const lruCacheItem = cacheItems.sort( (a, b) => a.timeMatched - b.timeMatched )[0]; await cache.delete(lruCacheItem.key); return await cache.add(url); }; ``` Something I'm unsure about is the appropriateness `Infinity` for never matched `CacheItem`s, but it makes the sorting easier. I'm definitely overlooking a number of corner cases, so looking for *your* thoughts. Thanks! -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/w3c/ServiceWorker/issues/863#issuecomment-353070261
Received on Wednesday, 20 December 2017 14:01:12 UTC