我想创建一个网站,即使当它的服务器离线时也可以工作——我发现这就是服务工人的目的。
当我重新加载带有service worker且没有连接的页面时,它工作正常。但是,轮班重新加载(例如,绕过缓存)会解除服务工作人员的防护,并出现“无法连接到服务器”错误。
我的问题是-我是否可以以某种方式防止轮班重新加载(shift f5、ctrl f5等)破坏服务人员,或者至少在不恢复连接的情况下使其恢复?
如何使ServiceWorker在缓存重置/移位F5中存活?
从理论上讲(*),你可以用js插件来检测按下Ctrl
或Shift
键的情况。。。然后防止“强制刷新”发生
...但是在这个Ctrl
/Shift
reload的背后有一个故事。
(*)免责声明:我还没有试过
这实际上是一个服务工作者规范。并且只存在于最近的Chrome变化中。对于Chrome的早期版本,Service Worker在“强制刷新”中没有任何问题。
连同W3C的规格
navigator.serviceWorker.controller返回null,如果请求是强制刷新(移位刷新)。
此外,有许多人(**)建议“强制刷新”应始终清除所有类型的缓存。这与其存在的目的和规格相匹配。
...此外,我们甚至在维基百科上看到了它。。。
维基百科:绕过缓存意味着强迫你的浏览器从头开始重新html" target="_blank">下载网页
(**)我们,网站开发人员的早期服务工作者。
在我看来,我认为让一支力量刷新它的工作是可以的。因为当我们这样做的时候,几乎所有人都希望浏览器不使用任何缓存。
通过以下方法,即使在按住Ctrl键F5键之后,我仍然能够继续使用service worker:
在窗口脚本中:
navigator.serviceWorker.register(<...>).then (registration => {
if (navigator.serviceWorker.controller === null) {
// we get here after a ctrl+f5 OR if there was no previous service worker.
navigator.serviceWorker.ready.then(() => {
registration.active.postMessage("claimMe");
});
}
<...>
});
在服务脚本中:
self.onmessage = (event) => {
if (event.data === "claimMe") {
self.clients.claim();
}
};
简而言之,我们要求服务工作者再次声明所有客户端,这甚至适用于使用Ctrl F5的客户端。
如果要遵守服务人员代码中的Ctrl F5,可以:
我调用服务器数据通过使用ajax在index.html.它是完美的获取这些数据。现在,我正在和服务人员一起工作。我可以缓存所有的静态资产(图像,js,css),并在Chrome开发工具的应用程序选项卡中的缓存存储中检查这些缓存的资产。我可以在网络选项卡中看到这些资产也被缓存(磁盘缓存)。 现在,我想使用ServiceWorker缓存这些ajax响应(图像文件数组)。在“网络”选项卡中,我可以看到它
我在Eclipse包资源管理器中看到以下信息: 是否可以更改此位置?
我有一个数据流,其中包含一个键,我需要将其与与该键关联的数据进行混合和匹配。每个键都属于一个分区,每个分区都可以从数据库加载。 数据非常大,在一个任务管理器中,几十万个分区中只有几百个可以容纳。 我目前的方法是基于并将分区数据缓存在中,以混合和匹配分区数据,而无需多次重新加载分区数据。 当同一分区上的消息速率过高时,我遇到了热点/性能瓶颈。 在这种情况下,我在Flink中有哪些工具可以提高吞吐量?
我搜索了如何在Angular2中缓存XHR,发现使用了< code>share()方法。但是我创建的服务并不像我预期的那样工作。 我错过了什么?(当然,导入所需的类和接口)
问题内容: 对于我的10,000点,我决定在这个很酷的网站上做出一些贡献:一种将位图缓存在本机内存中的机制。 背景 Android设备为每个应用程序分配的内存非常有限-堆的范围从16MB到128MB,具体取决于各种参数。 如果超过此限制,则会得到OOM,并且在使用位图时可能会发生多次。 很多时候,应用可能需要克服这些限制,对巨大的位图执行繁重的操作,或者只是将其存储以备后用,而您需要 我想出的是一
我正在尝试使用android Studio3.1.1开发一个简单的android应用程序。在构建时,我从Gradle得到一个同步失败的错误。底部生成面板显示此错误消息。 无法为“http://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/kotlin-stdlib-jre8-1.2.0.pom”添加头。从服务器接