[SecureContext, Exposed=(Window,Worker)] interface CacheStorage { [NewObject] Promise<(Response или undefined)> match(RequestInfo request, optional MultiCacheQueryOptions options = {}); [NewObject] Promise<boolean> has(DOMString cacheName); [NewObject] Promise<Cache> open(DOMString cacheName); [NewObject] Promise<boolean> delete(DOMString cacheName); [NewObject] Promise<sequence<DOMString>> keys(); };
dictionary MultiCacheQueryOptions : CacheQueryOptions { DOMString cacheName; };
Интерфейс CacheStorage в значительной степени соответствует объектам карты ECMAScript 6, но полностью асинхронен и содержит дополнительные удобные методы. Методы clear, forEach, записи entries и значения values намеренно исключены из области действия первой версии, прибегая к продолжающемуся обсуждению асинхронной итерации TC39.
Пользовательский агент должен создать объект CacheStorage при создании объекта Window или объекта WorkerGlobalScope и связать его с этим глобальным объектом (global object).
Объект CacheStorage представляет имя для кэширования карты источника объекта настроек среды связанного с ним глобального объекта. Несколько отдельных объектов, реализующих интерфейс CacheStorage для документов и работников, могут быть связаны с одним и тем же именем для одновременного кэширования карты.
5.5.1. Метод match(request, options)
Шаги метода сопоставления match(request, options):
1. Если существует options["cacheName"], то: 1.1 Верните новое обещание и параллельно выполните следующие подшаги: 1.1.1 Для каждого cacheName → cache соответствующего имени для карты кеширования: 1.1.1.1 Если options["cacheName"] совпадает с cacheName, то: 1.1.1.1.1 Разрешить обещание promise с результатом выполнения алгоритма, указанного в методе match(request, options) интерфейса Cache с запросом request и параметрами options (предоставление кеша cache в качестве thisArgument для внутреннего метода сопоставления [[Call]] из match(request, options).) 1.1.1.1.2 Прервите эти шаги. 1.1.2 Разрешить обещание promise с undefined. 2. Иначе: 2.1 Пусть обещание promise будет обещанием, разрешенным с помощью undefined. 2.2 Для каждого cacheName → cache соответствующего имени для карты кеширования: 2.2.1 Задайте для обещания promise результат реакции на себя с помощью обработчика выполнения, который при вызове с аргументом response выполняет следующие подшаги: 2.2.1.1 Если ответ response не является undefined, вернуть ответ response. 2.2.1.2 Вернуть результат выполнения алгоритма, указанного в методе match(request, options) интерфейса Cache, с запросом request и параметрами options в качестве аргументов (предоставив кеш cache в качестве thisArgument внутреннему методу сопоставления [[Call]] из match(request, options).) 2.3 Вернуть обещание promise.
5.5.2. Метод has(cacheName)
Шаги метода has(cacheName):
1. Пусть обещание promise станет новым обещанием. 2. Параллельно выполните следующие подшаги: 2.1 Для каждого ключа key → значение value соответствующего имени для карты кеширования: 2.1.1 Если cacheName совпадает с ключом key, разрешите обещание promise со значением true и прервите эти шаги. 2.2 Разрешить обещание promise с false. 3. Вернуть обещание promise.
5.5.3. Метод open(cacheName)
Шаги метода open(cacheName):
1. Пусть обещание promise станет новым обещанием. 2. Параллельно выполните следующие подшаги: 2.1 Для каждого ключа key → значение value соответствующего имени для карты кеширования: 2.1.1 Если cacheName совпадает с ключом key, то: 2.1.1.1 Выполните обещание promise с помощью нового объекта Cache, представляющего значение value. 2.1.1.2 Прервите эти шаги. 2.2 Пусть cache будет новым списком ответов на запрос. 2.3 Задайте соответствующее имя для кеширования карты[cacheName] для cache. Если эта операция записи в кэш завершилась неудачно из-за превышения предоставленного лимита квоты, отклоните обещание promise с помощью исключения "QuotaExceededError" DOMException и прервите эти шаги. 2.4 Выполните обещание promise с помощью нового объекта Cache, представляющего cache. 3. Вернуть обещание promise.
5.5.4. Метод delete(cacheName)
Шаги метода delete(cacheName):
1. Пусть обещание promise будет результатом выполнения алгоритма, указанного в методе has(cacheName) с cacheName. 2. Вернуть результат реакции на обещание promise с помощью обработчика выполнения, который при вызове с аргументом cacheExists выполняет следующие подшаги: 2.1 Если cacheExists имеет значение false, то: 2.1.1 Вернуть false. 2.2 Пусть cacheJobPromise будет новым обещанием. 2.3 Параллельно выполните следующие подшаги: 2.3.1 Удалите соответствующее имя для кэширования карты[cacheName]. 2.3.2 Разрешите cacheJobPromise со значением true. Примечание. После этого шага существующие объекты DOM (т. е. указанные в настоящее время объекты Cache, Request и Response) должны оставаться работоспособными. 2.4 Вернуть cacheJobPromise.
5.5.5. Метод keys()
Шаги метода keys():
1. Пусть обещание promise станет новым обещанием. 2. Параллельно выполните следующие подшаги: 2.1 Пусть cacheKeys будет результатом получения ключей соответствующего имени для карты кеширования. Примечание. Элементы в упорядоченном наборе результатов расположены в том порядке, в котором их соответствующая запись была добавлена к имени для кэширования карты. 2.2 Разрешить обещание promise с помощью cacheKeys. 3. Вернуть обещание promise.
Информационные ссылки
Стандарт Service Workers Nightly — https://w3c.github.io/ServiceWorker/#cachestorage-interface