Nik*_*ili 8 javascript service-worker workbox angular-service-worker
我在安装事件中使用服务工作者和预缓存资产。
我还有fetch
侦听器,它在运行时动态拦截请求和缓存。我知道人们说将 indexeddb 用于动态内容,例如 json 数据和可能的图像。
问题:为什么即使它是请求/响应存储,也为该 json 数据使用缓存 API 不是一个好习惯?
我问这个的原因是因为我尝试了以下操作:我index.html and main.js
在install
事件中预先缓存,并且在main.js
我的axios
请求中返回一些 json 并将其放入index.html
. 如果我使用动态缓存,这意味着当对该 json api 端点发出请求时,它首先进入我的服务工作者,它获取响应并将其放入cache
. 然后我测试了一下,当在离线模式下刷新页面时,我仍然得到相同的结果(json 数据相应地放在 index.html 中)。
所以我猜即使缓存 API 存储请求/响应,它仍然可以完美地用于 json 端点 api url。
知道为什么在使用服务工作者时更喜欢 indexeddb 而不是缓存 API 吗?
使用缓存存储 API 缓存 JSON 数据非常好,作为使用 IndexedDB 的替代方法。我希望有类似的性能特征,在这两种情况下,您都可以从 Service Worker 或window
上下文读取/写入数据。
如果您有尚未与Response
对象关联的 JSON 数据,或者没有“真实”请求 URL,那么使用缓存存储 API 会有点尴尬,因为您必须有效地“伪造”他们。但这并不是特别难做到:
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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1315 次 |
最近记录: |