我有一个(理想情况下)安全登录对象,我想保留在服务工作者上下文中,但ServiceWorkerGlobalScope似乎随机重置(Chrome 47 Ubuntu)。什么原因导致服务人员的全局环境被重置?
要进行测试,在服务人员我插入:
var iid = setInterval(function() {
var now = performance.now();
return self.clients.matchAll().then(function(clients) {
return Promise.all(clients.map(function(client) {
return client.postMessage({messageType: "canary", value: now})
}))
})
}, 1000);
并在客户端:
navigator.serviceWorker.addEventListener("message", function(event) {
if (event.data.messageType = "canary") console.log(event.data.value)
});
导致在客户端控制台上:
⋮
147200.06500000003
148200.08000000002
149200.09000000003
1212.9800000000002
2212.5350000000003
3212.4700000000003
⋮
不幸的是,我仍然无法可靠地复制这个。
据我所知,服务人员在clients
对象不再返回任何Client
之后的某个点应该从内存中删除。然而,上述情况至少在我可以猜测的任何注销事件中移除至少十秒钟。
所以我有两个问题。什么可能会导致这种情况,以及将持久对象与服务工作者脚本关联的最佳实践是什么,而不进行序列化并且最好不发送到客户端上下文?
而索引资料可作为很好地不依赖于缓存API坚持非请求/响应对。 – Salva
我意识到我试图用状态来存储我应该存储在内存中的东西,换句话说,这是我带来这个问题的糟糕的设计选择。现在改用indexedDB。 –