当前位置: 首页 > 知识库问答 >
问题:

"可用的新版本"与Service Worker和sw预紧

韩耘豪
2023-03-14

我试图使用sw precache,但我一定是做错了什么!

我主要使用github repo提供的演示代码,似乎无法获得应用程序的更新。一旦第一次缓存,它就不会检查新版本。

我希望在发布新的服务人员时,浏览器会请求新的服务人员,并在后台相应地更新缓存。然后使用示例中的注册码,我将能够提示用户刷新并从其新刷新的缓存中获取最新版本。

如果有人能为我指出正确的方向,我将不胜感激。

为了说明这个问题,我在这里创建了一个单独的示例:https://github.com/stevenocchipinti/sw-precache-demo

该示例使用了create react app中的一个基本框架,该框架具有一个内置的构建任务,负责对文件名等进行指纹识别。

我怀疑问题在于我使用以下sw precacheconfig来缓存所有内容:

{
  "staticFileGlobs": [ "build/**/*.*" ],
  "stripPrefix": "build/"
}

回购协议的自述中有更准确的步骤,但我为重现问题而采取的基本步骤如下(我的预期可能不正确)。

>

重新加载页面
控制台中的消息不应再次出现,因为已安装service worker,但页面仍应工作。

脱机并重新加载页面
页面应该仍然工作

对源代码进行可见的更改

重建(运行构建任务并sw precache

这就是我理解错误的地方

重新加载页面

  • 服务人员应在后台更新缓存

重新加载页面

  • 这次浏览器将使用新缓存
  • 更改现在应该可见
  • 控制台中不应该有任何消息

一旦应用最初被缓存,它将永远不会更新,除非您注销服务辅助角色或强制重新加载。

我不知道如何使这项工作-任何帮助将不胜感激!

共有1个答案

呼延晋
2023-03-14

复制开发托管环境之后,我可以看到您正在为服务人员提供服务。js文件,浏览器HTTP缓存生存期为一小时:

在前面的回答中,还有更多关于为什么这会导致你看到的行为以及最佳实践的信息。正如答案顶部所提到的,浏览器计划改变他们的行为,默认情况下停止尊重服务工作人员文件的HTTP缓存,这主要是由于您在这里遇到的混乱类型。然而,就目前而言,Chrome和火狐的生产版本仍然尊重这些标题。

 类似资料:
  • 鸿蒙开发app,实现-提示用户打开app之后检查版本如果当前版本小于最新版本提示更新版本-功能。 通过getBundleInfo()获取到的是用户安装的版本还是最新版本呢? 如何获取用户安装的app版本?如何获取应用市场的最新版本? 通过getBundleInfo()获取app.json文件中的version字段

  • 我有一个应用在谷歌Play商店。当一个更新版本可用时,旧版本将变得不可用--也就是说,如果用户不更新app,他们就不在app中进入。当新版本可用时,我如何强制用户更新应用程序?

  • electron-vue 自 2016年5月初 创建以来有了很大的发展,并引入了许多新奇的功能。你能相信有一段时间该项目还不支持 vue-cli 脚手架吗?新功能的开发计划不会停止。唯一的缺点是,每天都有华而不实的东西存在,进而把你的项目卡在一个老的脚手架上。尽管 electron-vue 利用了 vue-cli 的优势,遗憾的是,并没有一个结构化的方式来 版本化 (version) 样板 或 使

  • MVNRepository通常为每个依赖项列出“版本”和“更新”。 如果我发布自己的包,如何指定“更新”版本 Maven在解决传递依赖时使用了哪个依赖项?所以如果我的包依赖于包A,它依赖于包B,版本=1.0,更新=1.1。我会得到哪个版本的B?

  • 最近我和Laravel一起工作。我使用作曲家来安装包和工匠的命令。 问题是我的机器使用的是Laravel 5.4而不是5.7。 当我运行phpinfo()时,结果是PHP版本7.2.7。您是否认为问题在于我没有使用最新版本的xampp,其中包含PHP7?

  • 说明:以下内容适用于V3.4+(包括V3.4),之前的版本请参考“App资源更新(V3.3之前)”和“App版本更新(V3.3之前)”。 从V3.4开始,模式一、模式二和模式三都支持资源更新和App版本更新。 一、资源更新 适用场景:仅仅是界面资源变化,没有本地插件变化; 操作步骤: 第一步:根据实际需求修改UI2下的页面; 第二步:重新编译界面资源(如果在“编辑本地App”的过程中,指定了资源版