gpt4 book ai didi

javascript - Service Worker(或类似的东西)中的长时间运行的进程

转载 作者:可可西里 更新时间:2023-11-01 02:43:40 27 4
gpt4 key购买 nike

我有一个使用 IndexedDB 存储其状态的客户端 JS 应用程序。工作正常。但是,它有点慢,因为我经常读取和写入 IndexedDB,以便在打开多个选项卡时状态不会变得不一致。

我的想法是...将所有数据库访问内容放入 Service Worker 中,然后我可以将值缓存在内存中,而不必担心另一个选项卡可能会更改数据库。

这似乎工作正常,除了我的应用程序的某些部分需要很长时间才能运行。我可以将 Service Worker 的状态(比如“X% 完成”)传达给我的 UI。但是如果运行时间超过 30 秒,Firefox 和 Chrome 似乎都会杀死 worker ,这对我来说太短了。

有什么办法可以绕过这个限制吗?如果没有,有什么想法可以实现类似的目标吗?我认为 Shared Worker 可以做到这一点,除了浏览器支持很差,而且我预计现在不会随着 Service Workers 背后的势头而有所改善。

最佳答案

关于服务 worker 的谷歌文档告诉我们,使用服务 worker 作为内存缓存是不可能的:

It's terminated when not in use, and restarted when it's next needed, so you cannot rely on global state within a service worker's onfetch and onmessage handlers. If there is information that you need to persist and reuse across restarts, service workers do have access to the IndexedDB API.

我的建议是继续使用 service workers 将数据持久化到数据库,并使用 localStorage 创建一个 shared cache between pages .进行更改的选项卡然后负责更新 localStorage 中的缓存并通过 service worker 持久保存到 IndexedDB。

关于javascript - Service Worker(或类似的东西)中的长时间运行的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41372703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com