我使用带有sw工具箱库的service worker。我的PWA缓存除API查询(图像、css、js、html)之外的所有内容。但是如果有一天某些文件会被更改呢。或者如果服务人员。js将被更改。应用程序应该如何知道文件中的更改?
我的服务人员。js:
'use strict';
importScripts('./build/sw-toolbox.js');
self.toolbox.options.cache = {
name: 'ionic-cache'
};
// pre-cache our key assets
self.toolbox.precache(
[
'./build/main.js',
'./build/main.css',
'./build/polyfills.js',
'index.html',
'manifest.json'
]
);
// dynamically cache any other local assets
self.toolbox.router.any('/*', self.toolbox.cacheFirst);
// for any other requests go to the network, cache,
// and then only use that cached resource if your user goes offline
self.toolbox.router.default = self.toolbox.networkFirst;
我不知道在PWA中更新缓存的常用方法是什么。也许PWA应该在后台发送AJAX请求并检查UI版本?
我在不使用任何库的情况下与服务工作者打交道,我最终提出的解决方案涉及一些服务器端代码和一些客户端。简而言之,策略
首先,您需要的变量和位置:
现在如何使用这两个:
>
如果值不同,这意味着您的Web应用版本不是最新的。
如果是这种情况,则取消注册Service Worker并刷新页面,以便重新注册Service Worker并缓存新文件。
当新文件可用时,实际要做什么
>
当一个人再次访问时,服务工作者应该重新注册,所有缓存的文件都将被检索。
我提供了一个基于php服务器端的代码,我在实现此策略时使用了该代码。它应该向你展示原则。只需将“Exercise”文件夹放到php服务器的htdocs中,它就可以工作,而无需执行任何其他操作。我希望你觉得它有用。。。请记住,如果您使用的是其他服务器而不是php,则可以使用数据库而不是配置文件来存储服务器端service worker变量:
Zip文件,代码为:ServiceWorkerExercise。拉链
这里有一个很好的解决方案,他说(简而言之)要么不使用缓存优先策略,要么更新显示“为最新更新重新加载”的UX模式
AFAIKsw_toolbox没有网络更新的缓存策略。我想这真的是你想要的。你想修改缓存-网络竞争策略-
我试图安装一个简单的ServiceWorker,但旧的,Django Web应用程序。我开始使用Chrome团队的示例读取缓存示例 这很好,但并不理想,因为如果需要,我想更新缓存。根据阅读此处所有其他服务人员的答案,有两种推荐方法。 > 使用一些服务器端逻辑来知道您显示的内容何时更新,然后更新您的服务辅助角色以更改所述内容。例如,这就是sw-preache所做的。 只要在需要更新资源时更新serv
我正在使用“缓存”将我的PWA资产缓存到service worker中,并使其脱机可用。 当我改变一个资产,特别是一个js文件,我修改至少一个字节在我的服务工作人员触发其本机更新:服务工作人员更新和检索所有以前缓存的资产,以刷新其缓存。 然而,服务器以文件的缓存版本响应,尽管我拥有所服务的文件,但我无法控制缓存控制http头。 如何防止在服务工作者缓存的资源上进行浏览器缓存?使用 后缀将不起作用,
我有一个基于service worker的离线应用程序,允许用户离线下载pdf文件。 有一个文本文件,其中包含pdf文件的下载路径和特定格式的文件标题(以及css、js和图像路径),应用程序通过ajax读取此文本文件并绘制所有可用pdf文件的列表(通过显示标题和下载链接) 在安装过程中,工作人员读取相同的文件,并将所有pdf文件与文本文件一起放入缓存中,以便这些文件可以离线访问。 当我用一些新的p
我使用sw-precache生成Polymer-CLI构建过程中的服务工作,因此它旨在更新更新文件的散列,以表示需要更新缓存。但是缓存中没有替换我更新的内容,因此如果我使用ctrl-r刷新,它将获得旧版本,但如果使用ctrl-shift-r刷新,它将获得新版本。原因可能是我的服务人员没有更新。 这份文件说 如果与当前相比,服务辅助程序文件中甚至有一个字节的差异,它就认为它是新的。 ,但如果我的新服
我将React应用程序转换为PWA,它的工作部分正常。 我遵循了本教程:https://medium.com/@toricpope/transform-a-react-app-to-a-progressive-web-app-pwa-dea336bd96e6 然而,本文只展示了如何缓存静态数据,我还需要存储来自服务器的数据,我可以按照本文第一个答案的说明来做:如何将API中的数据缓存到React
因此,我有一个带有服务工作者的HTML页面,服务工作者缓存索引。html和我的JS文件。 问题是当我更改JS时,更改不会直接显示在客户端浏览器上。当然,在chrome开发工具中,我可以禁用缓存。但是在Chrome Mobile,我该怎么做呢? 我试图访问站点设置并点击CLEAR%RESET按钮。但它仍然从缓存加载旧页面/加载。我试图使用其他浏览器或铬隐姓埋名,它加载新的页面。 然后,我尝试清除我的