Spec-Zone.ru › Web APIs

Кэш: метод put()

Базовая Широко доступная

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2018 года.

  • Узнать больше
  • Посмотреть полную совместимость
  • Отправить отзыв

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Метод put() интерфейса Cache позволяет добавлять пары ключ/значение в текущий объект Cache.

Часто вам нужно будет fetch() один или несколько запросов, а затем добавить результат непосредственно в ваш кэш. В таких случаях лучше использовать Cache.add()/Cache.addAll(), так как они являются сокращенными функциями для одной или нескольких из этих операций.

fetch(url).then((response) => {
  if (!response.ok) {
    throw new TypeError("Bad response status");
  }
  return cache.put(url, response);
});

Примечание: put() перезапишет любую пару ключ/значение, ранее сохранённую в кэше, которая соответствует этому запросу.

Примечание: Cache.add/Cache.addAll не кэшируют ответы с Response.status значениями, которые не находятся в диапазоне 200, в то время как Cache.put позволяет хранить любую пару запрос/ответ. В результате Cache.add/Cache.addAll нельзя использовать для хранения неявных ответов, в то время как Cache.put можно.

Синтаксис

put(request, response)

Параметры

request

Объект Request или URL, которые вы хотите добавить в кэш.

response

Response, который вы хотите сопоставить с запросом.

Возвращаемое значение

Обещание Promise, которое разрешается значением undefined.

Исключения

TypeError

Возвращается, если схема URL не http или https.

Примеры

Этот пример взят из примера MDN simple-service-worker (см. simple-service-worker, работающий онлайн). Здесь мы ждём срабатывания события FetchEvent. Мы создаём пользовательский ответ следующим образом:

  1. Проверяем, найдено ли соответствие запросу в CacheStorage с помощью CacheStorage.match(). Если да, то используем его.
  2. Если нет, открываем кэш v1 с помощью open(), помещаем стандартный запрос в сеть в кэш с помощью Cache.put() и возвращаем клонированный стандартный запрос из сети с помощью return response.clone(). Клонирование необходимо, потому что put() потребляет тело ответа.
  3. Если это не удаётся (например, из-за отсутствия подключения к сети), возвращается резервный ответ.
let response;
const cachedResponse = caches
  .match(event.request)
  .then((r) => (r !== undefined ? r : fetch(event.request)))
  .then((r) => {
    response = r;
    caches.open("v1").then((cache) => {
      cache.put(event.request, response);
    });
    return response.clone();
  })
  .catch(() => caches.match("/gallery/myLittleVader.jpg"));

Спецификации

Спецификация
Service Workers
# cache-put

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
put
43Требуется HTTPS с версии 46.
16 41
30Требуется HTTPS с версии 33.
11.1
43Требуется HTTPS с версии 46.
41
30Требуется HTTPS с версии 33.
11.3
4.0Требуется HTTPS с Samsung Internet 5.0.
43Требуется HTTPS с версии 46.

См. также

  • Использование Service Workers
  • Cache
  • Window.caches и WorkerGlobalScope.caches

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Cache/put

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API