为什么对动态内容使用 indexeddb 而不是缓存 api
why to use indexeddb instead of cache api for dynamic content
我在安装事件中使用服务工作者和预缓存资产。
我还有 fetch
侦听器,它会在运行时动态拦截请求和缓存。我知道人们说将 indexeddb 用于动态内容,例如 json 数据和可能的图像。
问题: 为什么对 json 数据也使用缓存 API 不是一个好习惯,即使它是 request/response存储?
我问这个的原因是因为我尝试了以下操作:我在 install
事件中预缓存了 index.html and main.js
,在 main.js
中我有 axios
请求returns 一些 json 并将其放入 index.html
。如果我使用动态缓存,这意味着当对 json api 端点的请求被发出时,它首先到达我的服务工作者,它获取响应并将其放入 cache
。然后我测试了一下,当在离线模式下刷新页面时,我仍然得到相同的结果(json 数据相应地放入 index.html)。
所以我猜即使缓存 API 存储 request/response,它仍然可以完美地用于 json 端点 api url。
知道为什么在使用 service worker 时更喜欢 indexeddb 而不是缓存 API 吗?
使用缓存存储 API 缓存 JSON 数据非常好,作为使用 IndexedDB 的替代方法。我希望有相似的性能特征,在这两种情况下,您都可以 read/write 来自服务工作者或 window
上下文的数据。
如果您有 JSON 数据尚未与 Response
对象相关联,或者没有有一个“真实的”请求 URL,因为您必须有效地“伪造”它们。但这并不是特别难做到:
const data = {
// some data
};
const jsonString = JSON.stringify(data);
const jsonResponse = new Response(jsonString, {
headers: {
'content-type': 'application/json',
},
});
const cache = await caches.open('json-cache');
await cache.put('/some-json-url', jsonResponse);
我在安装事件中使用服务工作者和预缓存资产。
我还有 fetch
侦听器,它会在运行时动态拦截请求和缓存。我知道人们说将 indexeddb 用于动态内容,例如 json 数据和可能的图像。
问题: 为什么对 json 数据也使用缓存 API 不是一个好习惯,即使它是 request/response存储?
我问这个的原因是因为我尝试了以下操作:我在 install
事件中预缓存了 index.html and main.js
,在 main.js
中我有 axios
请求returns 一些 json 并将其放入 index.html
。如果我使用动态缓存,这意味着当对 json api 端点的请求被发出时,它首先到达我的服务工作者,它获取响应并将其放入 cache
。然后我测试了一下,当在离线模式下刷新页面时,我仍然得到相同的结果(json 数据相应地放入 index.html)。
所以我猜即使缓存 API 存储 request/response,它仍然可以完美地用于 json 端点 api url。
知道为什么在使用 service worker 时更喜欢 indexeddb 而不是缓存 API 吗?
使用缓存存储 API 缓存 JSON 数据非常好,作为使用 IndexedDB 的替代方法。我希望有相似的性能特征,在这两种情况下,您都可以 read/write 来自服务工作者或 window
上下文的数据。
如果您有 JSON 数据尚未与 Response
对象相关联,或者没有有一个“真实的”请求 URL,因为您必须有效地“伪造”它们。但这并不是特别难做到:
const data = {
// some data
};
const jsonString = JSON.stringify(data);
const jsonResponse = new Response(jsonString, {
headers: {
'content-type': 'application/json',
},
});
const cache = await caches.open('json-cache');
await cache.put('/some-json-url', jsonResponse);