https://www.sitepoint.com/cache-fetched-ajax-requests/
Я читаю эту статью о создании выборки с использованием SessionStorage в качестве кэша. Когда URL-адрес идентичен, мы читаем из SessionStorage, чтобы выполнить запрос.
const cachedFetch = (url, options) => {
// Use the URL as the cache key to sessionStorage
let cacheKey = url
// START new cache HIT code
let cached = sessionStorage.getItem(cacheKey)
if (cached !== null) {
// it was in sessionStorage! Yay!
let response = new Response(new Blob([cached]))
return Promise.resolve(response)
}
// END new cache HIT code
return fetch(url, options).then(response => {
// let's only store in cache if the content-type is
// JSON or something non-binary
if (response.status === 200) {
let ct = response.headers.get('Content-Type')
if (ct && (ct.match(/application\/json/i) || ct.match(/text\//i))) {
// There is a .json() instead of .text() but
// we're going to store it in sessionStorage as
// string anyway
// If we don't clone the response, it will be
// consumed by the time it's returned. This
// way we're being un-intrusive.
response.clone().text().then(content => {
sessionStorage.setItem(cacheKey, content)
})
}
}
return response
})
}
Что я не понимаю, так это зачем нам нужно делать это, чтобы сделать новый ответ?
let response = new Response(new Blob([cached]))
Я понимаю, что sessionStorage хранит только текст, и я помню blob
больше относится к двоичным данным, таким как images / videos / aud ios. Так почему же нам нужно сначала преобразовать текст в BLOB-объект, чтобы создать новый объект Response.
Я также задал связанный вопрос перед Каким должен быть вызван промежуточный результат, возвращаемый запросом на выборку? BLOB-объект или просто ответ? Существенным является вопрос о том, является ли объект ответа также blob
, и ответ, по-видимому, не