Lit*_*One 12 javascript object-lifetime service-worker
例如,我在服务工作者中声明一个全局变量,例如
var cacheVersion = "v1"; // line no 1 in sw.js
Run Code Online (Sandbox Code Playgroud)
这个变量的生命周期是多少?该变量是否会一直存在,直到 Service Worker 取消注册为止,或者如果 Service Worker 处于空闲状态,是否会删除该变量。
我认为@pl4n3th 只描述了一半的情况。
我使用术语“关闭”来表示浏览器仍然注册了 Service Worker,但也许您已经浏览该网站一段时间了,因此它会将其从内存中释放。
是的,当浏览器关闭服务工作线程时,全局状态就会丢失。但是,当它恢复时,顶层的所有代码都会再次运行,因此它将执行此行(如果它位于顶层):
var cacheVersion = "v1"; // line no 1 in sw.js
Run Code Online (Sandbox Code Playgroud)
这意味着现在您cacheVersion再次可以使用该变量了。由于它是一个常数,所以没问题。
但是,如果在fetch回调中说,您设置了cacheVersion = "v2". 当 Service Worker 下次关闭然后恢复时,全局状态将丢失,它将使用顶级指令再次运行 javascript,因此cacheVersion将再次处于"v1".
小智 4
存储在 Service Worker 内的任何变量只会在 Service Worker 存在期间存在。一旦浏览器杀死它,你的变量就消失了。如果您想保留一个值,请使用indexedDb(可由服务工作人员访问)或LocalStorage(仅限DOM访问,因此您需要通过postMessage将其传递给服务工作人员)
| 归档时间: |
|
| 查看次数: |
3506 次 |
| 最近记录: |