带有 Service Worker 和 sw-precache 的“新版本可用”

2023-11-24

我正在尝试使用sw-precache,但我一定做错了什么!

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

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

如果有人能指出我正确的方向,我将非常感激。

Example

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

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

我怀疑问题出在我使用以下内容缓存所有内容sw-precache config:

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

存储库的自述文件中有更准确的步骤,但我重现问题所采取的基本步骤如下(我的期望可能不正确)。

步骤和假设

  1. 首先浏览到应用程序
    我应该看看Content is now available offline!在控制台中

  2. 重新加载页面
    由于安装了 Service Worker,控制台中的消息不应再次出现,但页面应该仍然可以工作。

  3. 离线并重新加载页面
    该页面应该仍然可以工作

  4. 对源代码进行可见的更改

  5. 重建(运行构建任务并sw-precache)

这就是我的理解一定是错误的地方

  1. 重新加载页面

    • Service Worker 应在后台更新缓存
    • 完成后,您应该看到New or updated content is available.在控制台中
    • 实际可见的更改应该在下次重新加载之前才可见
  2. 再次重新加载页面

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

问题

一旦应用程序最初被缓存,它就永远不会更新,除非您取消注册服务工作者或强制重新加载。

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


复制您的开发托管环境后,我可以看到您正在为您的service-worker.js浏览器 HTTP 缓存生命周期为一小时的文件:

enter image description here

有关为什么这会导致您所看到的行为的更多信息以及最佳实践,请参见之前的回答。正如该答案顶部提到的,浏览器计划更改其行为,以默认停止支持服务工作线程文件的 HTTP 缓存,这主要是由于您在这里遇到的混乱类型。不过,目前 Chrome 和 Firefox 的生产版本仍然遵循这些标头。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 Service Worker 和 sw-precache 的“新版本可用” 的相关文章

  • IISreset和应用程序池回收对缓存的影响有什么区别

    我遇到了一个奇怪的问题 据我所知 可以通过回收应用程序池来清除缓存 然而 在最近的一个项目中 缓存并没有以这种方式清除 相反 我们必须重置 IIS 以清除缓存 这些行为之间有什么区别 造成我所经历的差异的原因可能是什么 当您回收AppPoo
  • Rails:计划任务来预热缓存?

    我使用以下内容通过 memcached 缓存加载缓慢的页面 caches action complex report expires in gt 1 day 控制器操作受 Devise 身份验证保护 当前 该页面在用户第一次请求时被缓存 当
  • 第一次播放声音时 AVAudioPlayer 启动缓慢

    我试图消除通过 iPhone 上的 AVAudioPlayer 播放 非常短 不到 2 秒 音频文件时的启动延迟 首先 代码 NSString audioFile NSString stringWithFormat caf NSBundle
  • 文件系统和 Memcached 哪个缓存更快/更好?

    我认为我还不清楚 从文件或从 memcached 读取内容更快吗 为什么 Memcached 速度更快 但内存有限 HDD 很大 但 I O 速度比内存慢 你应该把memcached 最热门的东西 and 所有其他人 can go 缓存文件
  • 即使禁用缓存,Safari 也会缓存 GET 请求

    我已经将我所知道的所有标头设置为在我的服务器上禁用缓存 甚至禁用 ETAG 但 Safari 仍然偶尔 大约 50 次 缓存我的请求 Workflow 我正在实施 oauth 1 所以 浏览器使GET api user request 服务
  • 在 Google Analytics 中跟踪添加到主屏幕 Web 应用程序

    我有一个移动网络应用程序 其 添加到主屏幕 功能运行良好 我正在尝试确定如何使用 Google Analytics 来最好地跟踪已将应用程序安装到主屏幕的用户的应用程序使用情况 似乎没有默认方法可以在分析中查看应用程序是否处于独立模式 Go
  • Cloudflare Worker 缓存 API 出现问题

    我现在花了无数的时间尝试让缓存 API 来缓存一个简单的请求 我让它在中间工作过一次 但忘记向缓存键添加一些内容 现在它不再工作了 不用说 cache put 没有指定请求是否实际被缓存的返回值并不完全有帮助 我只能进行反复试验 有人可以给
  • 如何防止 Ajax/javascript 结果在浏览器中缓存?

    如何防止浏览器缓存Ajax结果 我有事件触发的 Ajax 脚本 仅当浏览器数据被清除时才显示结果 在 IE6 和 Firefox 3 0 10 中测试 随机 URL 可以工作 但它是一种 hack HTTP 内置了应该可以工作的解决方案 尝
  • PCRE PHP “S”(模式的额外分析)修饰符的用法和实用性的具体示例?

    PHP 手册对 PCRE 的 S 模式的额外分析 修饰符进行了以下说明http php net manual en reference pcre pattern modifiers php http php net manual en re
  • 列出 chrome 注册的 Service Worker

    有没有办法列出所有注册服务人员的浏览器 假设我已经注册 安装了一些服务人员 我可以通过js获取文件名数组列表吗 显然我找到了两种适合我的方法 对于 Chrome 一种是使用快捷命令 chrome serviceworker internal
  • Google App Engine - 破坏服务 URL 缓存

    我终于设法让图像在 App Engine 上正确旋转 现在我正在努力绕过缓存的图像 而标准缓存清除技术不起作用 因此 第一次旋转图像时 我得到了一个不同的 URL 并且图像被旋转 第二次旋转它时 我得到相同的 URL 只有在附加 s300
  • Rails 4.0 expire_fragment/缓存过期不起作用

    我一直在尝试使用 Rails 的缓存功能 但我无法使某些缓存片段过期 尽管它们似乎已过期 使用 Rails 教程网站中指出的 Russian Doll Caching 我正在使用此配置 我使release controller rb 控制器
  • PWA 可以访问联系人、GPS 或使用手机摄像头吗?

    PWA 可以访问联系人 GPS 或使用手机摄像头吗 这在任何系统 ios android 中都可能吗 是否有任何开发计划来实现这些功能 PWA 无法克服一些限制 you cannot访问电话上的联系人列表 另一方面 你can拍照并使用 GP
  • Angular PWA 离线存储

    我正在构建一个新的 Web 应用程序 即使没有互联网连接 它也需要无缝工作 我选择了 Angular 并正在构建一个 PWA 因为它具有使应用程序离线工作的内置功能 到目前为止 我已经让服务工作人员完美工作并由清单文件驱动 这很好地缓存了静
  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • 为什么 data.table `:=` 的 knit 缓存失败?

    这在精神上与this https stackoverflow com q 15267018 1900520问题 但机制上一定不同 如果您尝试缓存knitr包含一个块data table 分配然后它的行为就好像该块尚未运行 并且后面的块看不到
  • 如何使用 Laravel Mix 和 WorkBox?

    我正在尝试为我的应用程序构建一个 PWA 并花了近 48 小时试图弄清楚如何将 Workbox 与 Laravel Mix 结合使用 具有讽刺意味的是 谷歌说 Workbox 是为了让事情变得简单 Buh 好吧 到目前为止我已经弄清楚了 我
  • `git rm --cached` 和 `git update-index --assume-unchanged` 之间的区别?

    我不明白之间的区别git rm cached and git update index assume unchanged 我知道git rm cached
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac

随机推荐

  • 已收到 SOAP xml 响应但未填充响应对象

    我向供应商的基于 Java 的 Web 服务添加了 服务参考 但我无法控制该服务 我有这个简单的客户端代码 Client myClient new Client CapabilitiesType response client GetCap
  • 将 CSS flex 元素的高度设置为相同的值?

    我有 2 个彼此相邻的 div 我使用 flex 和 justify content align items 垂直和水平居中 例子 HTML div class inner div class section green img src h
  • 如何在 Laravel 分页集合中使用 Transform

    我想在 laravel 5 5 中的分页集合中使用映射或转换 但我正在努力工作 这就是我想做的但是getCollection不可用于LengthAwarePaginator正如我们在以前的 Laravel 版本中所做的那样 如何转换分页集合
  • 如何在Python中压缩文件夹和文件? [复制]

    这个问题在这里已经有答案了 我有一个名为 files 的文件夹 其中包含大量 jpg 照片 我还有一个名为 temp kml 的文件 我想创建一个 KMZ 文件 基本上是一个 zip 文件 其中包含 temp kml 文件和其中包含照片的文
  • org.postgresql.util.PSQLException:致命:抱歉,已经有太多客户端

    我正在尝试连接到 Postgresql 数据库 但收到以下错误 错误 org postgresql util PSQLException 致命 抱歉 已经有太多客户端 该错误是什么意思以及如何修复它 My server properties
  • Linux 中“系统”和“执行”之间的区别?

    有什么区别system and exec家庭命令 特别是我想知道他们中的哪一个创建子进程来工作 system 呼唤sh处理你的命令行 这样你就可以获得通配符扩展等 exec 及其朋友用新的进程映像替换当前的进程映像 With system
  • nameof() 是在编译时评估的吗?

    在 C 6 中 您可以使用nameof 运算符获取包含变量或类型名称的字符串 这是在编译时评估的 还是在运行时通过某些 Roslyn API 评估的 Yes nameof 在编译时评估 查看最新版本的规格 表达式的名称是一个常量 在所有情况
  • Android:单独片段中的多个小吃栏(ViewPager)

    我有一个viewpager 当然还有一些片段 这些片段中的每一个都以 CoordinatorLayout 作为父级 我正在展示一个小吃栏 问题是 如果片段 A 显示小吃栏 那没问题 但如果它的相邻片段 B 也显示小吃栏 则片段 A 中的小吃
  • 参数化 sql 查询 - asp.net / c#

    所以我最近了解到我绝对应该使用参数化查询来避免 SQL 注入等安全问题 一切都很好 我已经成功了 此代码显示了我如何执行此操作的一些代码 param1 new SqlParameter param1 ParameterName userna
  • 如何通过java代码设置JMX远程端口系统环境参数进行远程监控?

    我有一个程序需要动态 即在运行时 打开一个可用的套接字并在其上启动 JMX 代理 此 JMX 参数是在 Java 代码内部设置的 而不是通过命令行设置的 这很好用 此后需要通过 Java Visual VM 进行监控 即发出 JMX 命令等
  • Get 和 post 方法与 HTTP 和 REST 相比的区别

    我是 REST 新手 我想知道什么时候使用get方法 什么时候使用post方法 在我的文献调查过程中 我接触到了这些知识 实际上 当我搜索 HTTP get 和 post 方法时 我读到 get 不对 URL 进行编码 而 post 对 U
  • 通过点击事件查找元素

    如何通过 jQuery 2 2 1 找到每个带有点击事件的元素 这似乎不再起作用 console log data this 0 events Try each function index value if data value 0 ev
  • 调用 $this->load->view() 后停止执行

    在Codeigniter中 我们如何在加载视图后停止执行 我试过这个 function index this gt load gt view myView die do not execute next code 但它导致空白屏幕 http
  • 如何在 bash curl 语句中包含“&”字符

    我正在尝试在 bash 中使用curl来下载网页 但是 URL 中的符号没有像我想要的那样被解释为字符 关于如何让 bash 相信该符号的任何想法 只是一个无聊的角色 没什么特别的 将整个 URL 放在双引号内应该可以解决您的问题
  • 我可以在不知道绑定本身的情况下更改 DataTrigger 中绑定的属性吗?

    我有一个TextBox如果框未聚焦 则格式化数字 但在编辑时保持数字未格式化 这是我想要的多个数字文本框的样式 但它们都包含不同的文本绑定 常规文本设置器和触发式文本设置器之间的唯一区别是触发式文本设置器具有StringFormat N2在
  • 我可以从 servlet 生成线程吗?

    在开始讨论我的主要问题之前 我想问一个基本问题 假设我正在运行一个简单的 Java 程序 它在 main 函数中生成一个线程 当main函数完成后 线程会继续运行吗 线程之间是否有父 子关系的概念 我有一个 servlet 需要很长时间才能
  • Qtableview 中的用户可编辑复选框

    我想在中实现用户可编辑复选框QTableView它是使用 QAbstractModel 创建的 我可以分配选中和未选中的复选框 但无法使其可编辑 标志设置为QItemIsUserCheckable 您可以通过实施模型轻松做到这一点setDa
  • 是否可以选择前面没有文本的元素?

    我想要一个匹配的 CSS 选择器 code in p code foo code bar p 但不是 code in p foo code bar code p code first child不起作用 两者都匹配 只是因为我认为这是不可能
  • 数据库架构比较错误:“版本存储内存不足”

    以下是我在 Visual Studio 2013 Professional w Update 3 中进行架构比较时收到的错误 我使用的是版本 2008 R2 DB 服务器 并且使用的是 SSMS 2014 这个错误持续了几周 并且越来越频繁
  • 带有 Service Worker 和 sw-precache 的“新版本可用”

    我正在尝试使用sw precache 但我一定做错了什么 我主要使用以下提供的演示代码github 仓库并且似乎无法获得应用程序的更新 一旦第一次被缓存 它就不会检查新版本 我期望当我发布新的 Service Worker 时 浏览器会请求