Ночные Работники Службы | Интерфейс CacheStorage

Ночные Работники Службы | Интерфейс CacheStorage

 

[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 Для каждого cacheNamecache соответствующего имени для карты кеширования:
   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 Для каждого cacheNamecache соответствующего имени для карты кеширования:
  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 Nightlyhttps://w3c.github.io/ServiceWorker/#cachestorage-interface