有没有办法创建连接超时来激活服务工作者?
Is there a way to create connection timeout to activate a service-worker?
我正在使用基于 Chromium 的 Electron 创建离线桌面应用程序。
该应用程序使用远程站点,我们正在使用 service worker 使站点的某些部分脱机。一切都很好,除了我称之为 "airplane wifi situation".
的特定情况
使用 Charles,我将下载带宽限制为 100 字节/秒。连接通过 webview.loadURL
发送,最终在 Chromium 中调用 LoadURLWithParams
。问题是它不会失败然后激活服务工作者,就像根本没有连接一样。发送请求后,它将永远等待响应。
我的问题是,如何在一定时间后使请求超时并从服务工作线程加载所有内容,就好像用户真正离线一样?
您自己编写的另一种方法是使用 sw-toolbox
库,它为服务工作者提供路由和运行时缓存策略,以及一些内置选项来帮助处理这些高级用例。特别是,您希望使用 networkTimeoutSeconds
parameter 配置在回退到先前缓存的响应之前等待网络响应的时间量。
您可以像下面这样使用它:
toolbox.router.get(
new RegExp('my-api\.com'),
toolbox.networkFirst, {
networkTimeoutSeconds: 10
}
);
这将配置一个路由,该路由将 GET
请求与包含 my-api.com
的 URL 相匹配,并应用 network-first 策略,该策略将在 10 秒后自动回退到先前缓存的响应。
我正在使用基于 Chromium 的 Electron 创建离线桌面应用程序。
该应用程序使用远程站点,我们正在使用 service worker 使站点的某些部分脱机。一切都很好,除了我称之为 "airplane wifi situation".
的特定情况使用 Charles,我将下载带宽限制为 100 字节/秒。连接通过 webview.loadURL
发送,最终在 Chromium 中调用 LoadURLWithParams
。问题是它不会失败然后激活服务工作者,就像根本没有连接一样。发送请求后,它将永远等待响应。
我的问题是,如何在一定时间后使请求超时并从服务工作线程加载所有内容,就好像用户真正离线一样?
您自己编写的另一种方法是使用 sw-toolbox
库,它为服务工作者提供路由和运行时缓存策略,以及一些内置选项来帮助处理这些高级用例。特别是,您希望使用 networkTimeoutSeconds
parameter 配置在回退到先前缓存的响应之前等待网络响应的时间量。
您可以像下面这样使用它:
toolbox.router.get(
new RegExp('my-api\.com'),
toolbox.networkFirst, {
networkTimeoutSeconds: 10
}
);
这将配置一个路由,该路由将 GET
请求与包含 my-api.com
的 URL 相匹配,并应用 network-first 策略,该策略将在 10 秒后自动回退到先前缓存的响应。