我们有一个信号页面应用程序,该应用程序已安装并处于活动状态。
现在我们的服务器重建应用程序,服务工作者文件正在服务器端更新。
我们的客户不知道这个新的服务人员文件,它仍然在使用旧的服务人员文件。
当它工作?如果我刷新/重新加载应用程序,新的服务工作人员正在安装。
如果服务器上的服务工作者文件正在更新,而客户端没有重新加载,我们如何刷新客户端?
可能的解决方案:我想,我需要在1小时后或其他时间进行投票。
“服务人员生命周期”是解决这类问题的重要资源。
特别是,有一个部分涉及更新:
触发更新:
因为您的SPA不使用真正的导航,所以您不会得到第一个要点中提到的自动更新检查。
您可以改为遵循该部分后面的示例:
如前所述,浏览器会在导航和功能事件后自动检查更新,但您也可以手动触发它们:
navigator.serviceWorker.register('/sw.js').then(reg => {
// sometime later…
reg.update();
});
我可能要做的是修改您的SPA的路由器,并在路由器要切换到新视图时自动调用reg.update()
。这将模拟与非SPA中相同的导航更新行为。
至少调用一次navigator之后。服务人员。register()
已完成,服务人员有机会安装并激活。此时,无论是否使用navigator,都将检查服务人员更新。服务人员。再次调用register()
。
本答案的前面部分描述了这些更新检查将在何时进行(隐式或显式)。
您可以通过比较服务辅助程序规范中注册和更新作业之间的差异来深入了解详细信息。
问题内容: 今天在这里提出了一个问题,我没有明显的答案。 假设我们串联并缩小所有资源文件(CSS和Javascript),并在“母版页”中声明它们。 在多页应用程序上,如果CSS文件发生更改,它将在下一次整页加载时重新充电。 在单页应用程序上,用户可以继续工作数天,并且永远不会为声明CSS文件的主页充值。在发出Ctrl-F5之前,用户永远看不到更改。 我确定有人已经想到了这一点,并且有经验可以分享
问题内容: 在完全基于服务器端的呈现(非Web 2.0)中,部署服务器端代码将在页面重新加载时直接更新客户端页面。相比之下,在基于React的Single Page Application中,即使在更新React组件之后,仍然会有一些客户端使用这些组件的旧版本(它们仅在重新加载浏览器时才获得新版本,这种情况很少发生)->如果页面如果是完全SPA,则某些客户端可能会在几个小时后才刷新页面。 应采用什
在完全基于服务器端的呈现(非Web 2.0)中,部署服务器端代码将在页面重新加载时直接更新客户端页面。相反,在基于React的单页应用程序中,即使在React组件更新后,仍然会有一些客户机使用旧版本的组件(他们只在浏览器重新加载时获得新版本,这应该很少发生)->如果页面是完全SPA,一些客户机可能在几个小时后才刷新页面。 应该使用什么技术来确保旧的组件版本不再被任何客户使用?
问题内容: 我需要检查我的应用程序是否在更新时启动,因为我需要创建一个仅在首次安装该应用程序时才出现的视图,以便在更新后再次出现。 问题答案: 您可以将值(例如,当前应用程序版本号)保存到其中,并在每次用户启动应用程序时对其进行检查。 在迅速-2版本看起来是这样的: 在迅速-3版本看起来是这样的:
因此,我们正在构建一个进步的web应用程序,当然,我们正在使用令人敬畏的服务人员。 每当我们发布新版本的应用程序时,我们都会更新软件中的版本号。js文件。页面加载时,浏览器会检测到sw。js已更改并触发“安装”和“激活”事件,这反过来会缓存适当的资源以供脱机使用。 这工作很棒。但是从我的理解来看,它只会在页面加载时被触发。因此,如果用户将应用程序添加到他们的主屏幕上,并且总是使用此快捷方式访问应用
我的应用程序将是: -单页应用程序(例如在角度/主干中) -基于Spring MVC的服务器。 我发现了许多关于使用Spring-Security的示例,其中登录页面、注销页面等都是HTMLs。Spring Security根据会话状态定向到适当的页面。 但就我而言,登录/注销页面将使用JavaScript - 与服务器进行登录/注销的所有交互都是通过HTTP(REST样式URL和响应JSON)进