Кэш: метод 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)
Параметры
Возвращаемое значение
Обещание Promise, которое разрешается значением undefined.
Исключения
TypeError-
Возвращается, если схема URL не
httpилиhttps.
Примеры
Этот пример взят из примера MDN simple-service-worker (см. simple-service-worker, работающий онлайн). Здесь мы ждём срабатывания события FetchEvent. Мы создаём пользовательский ответ следующим образом:
- Проверяем, найдено ли соответствие запросу в
CacheStorageс помощьюCacheStorage.match(). Если да, то используем его. - Если нет, открываем кэш
v1с помощьюopen(), помещаем стандартный запрос в сеть в кэш с помощьюCache.put()и возвращаем клонированный стандартный запрос из сети с помощьюreturn response.clone(). Клонирование необходимо, потому чтоput()потребляет тело ответа. - Если это не удаётся (например, из-за отсутствия подключения к сети), возвращается резервный ответ.
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. |
См. также
© 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