我正在为客户构建一个pwa,它将为其员工列出即将完成的任务。它们通常位于移动服务较差的地区,因此目的是只要有数据就下载记录,然后从indexeddb本地加载。
我的初衷是使用"周期性同步"。直到我意识到最长刷新时间是每12小时一次。
接下来,我转向常规的后台同步,js应用程序向service worker发送同步请求,service worker在ExtendableEvent.waitUntil
上运行该功能,如Google的后台同步示例:
self.addEventListener('sync', function(event) {
if (event.tag == 'myFirstSync') {
event.waitUntil(doSomeStuff());
}
});
然而,我发现event.waitUntil
似乎每5分钟才重新尝试一次呼叫,我想要更快的刷新率(更像是每30秒)。
我有两个问题-首先,是否有可能加快waitUntil
上的重试率。
也许更重要的是,这是一个有用的策略吗?在我看来,我的应用程序可以反复调用更新函数,甚至不打扰service worker。我从后台同步中得到了什么好处?
在pwa工具包中还有什么更适合我的需求吗?
(定期的,"非周期性的")后台同步的好处是,重试的生命周期超过了你的web应用程序打开的生命周期。一旦同步最终成功,你可以做一些事情,比如显示一个通知(假设用户已经授予权限),将用户带回到你的web应用程序继续工作。
因为这个特性涉及到在后台运行代码,在浏览器打开但web应用可能关闭的情况下,浏览器对代码运行的频率施加了限制。您不能增加重试尝试的频率。
但是你绝对可以在service worker和后台同步的上下文中实现重试逻辑,通过在你的web应用程序本身的上下文中以你想要的频率运行代码。但在这种情况下,重试将停止一旦用户关闭你的web应用程序。