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

使服务工作者始终从服务器加载文件,除非处于脱机状态

白学
2023-03-14

据我所知,服务人员有自己的缓存。HTTP流量有一个单独的缓存。

脱机时,浏览器拒绝从HTTP缓存向您显示网站,但很乐意从Service Worker缓存向您显示网站。

我每天更新我的网站很多次(只有文件的内容,网址保持不变)。我的HTTP缓存设置为一小时。

我想提供离线模式。但是在线时,网站应该总是从服务器加载(或者从1小时的HTTP缓存加载)。

我应该为此类服务人员使用什么代码?我相信这里没有描述:https://web.dev/offline-cookbook

共有1个答案

乌靖
2023-03-14

基于您的用例,我想说您可以使用“网络优先”方法。

self.addEventListener(’fetch’, function (event) {
    event.respondWith(
        fetch(event.request).catch(function() {
            return caches.match(event.request)
        })
    )
})

在获取事件处理程序中,我们正在执行以下操作:-

  • 使用fetch方法从服务器获取数据
  • 添加catch处理程序以防网络故障,并从缓存中获取数据。(在<代码>脱机<代码>状态下,将显示此选项)

注意:-我们假设您正在service worker的安装事件中缓存数据。如果您没有,那么我们也可以在fetch事件中执行此操作。

 类似资料:
  • 问题内容: 从我的根目录删除后,Chrome仍然运行我从Webroot中删除的服务工作者。如何从我的网站和Chrome卸载服务工作者,以便可以重新登录我的网站? 我已将问题归结为ServiceWork的缓存机制,我只想暂时将其删除,直到有时间对其进行调试为止。我正在使用的登录脚本将重定向到Google的服务器,以便他们登录其Google帐户。但是,我从login.php页面获得的只是一条消息。 问

  • 从根目录中删除后,Chrome仍然运行我从webroot中删除的服务工作者。我如何从我的网站和Chrome卸载服务工作者,以便我可以重新登录到我的网站? 我已经将问题追溯到Service Work的缓存机制,我现在只想删除它,直到我有时间调试它。我正在使用的登录脚本重定向到谷歌的服务器,以便他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条消息。

  • 因此,清单已被弃用,试图在express web应用程序中实现服务工作者。这是我的项目结构: 在我的express应用程序中,我使用的公用文件夹如下: 登录。呈现的ejs模板 注册成功。 和西南部。js 安装 当同一个应用程序重新加载或页面导航时,读取不会触发,也不会从服务工作者加载数据,总是从服务器加载。 但是当我尝试在不同的浏览器选项卡中使用例如:从服务人员的提取中加载。 当我研究时,我了解了

  • 问题内容: 我有一个URL,用于保存我的工作中的一些项目,它们大部分是MDB文件,但也有一些JPG和PDF。 我需要做的是列出该目录中的每个文件(已完成)并为用户提供下载它的选项。 使用PHP如何实现? 问题答案: 要读取目录内容,可以使用readdir()并使用脚本(在我的示例中)来下载文件 在其中,您可以强制浏览器发送下载数据,并使用basename()来确保客户端不会传递其他文件名,例如

  • 我注意到,当服务工作人员脚本本身加载到浏览器中时,不再触发服务工作人员的读取事件。例如,当我们有一个新版本的服务辅助角色时,旧的服务辅助角色读取事件不会被触发。因此,旧的服务工作者不能再检查新服务工作者的内容。 我确信这以前是可能的,我想知道这是否是一个bug,或者是否对此进行了任何更改。我在官方存储库或W3C草稿中没有找到与此更改相关的任何内容。 为了验证fetch事件没有被触发,我用版本号(参

  • 我正在尝试将大量文件从服务器A传输到服务器B。我已经在A上设置了FTP(使用FileZilla)。 当我尝试从PC连接到A时,它工作正常。但当我尝试从B连接到A时,它不起作用。FTP用户登录,但目录列表命令一直处于停滞状态。 防火墙端口21已打开。我尝试了多台服务器、不同的FTP客户端,但没有用。除了FileZilla,我还尝试了内置FTP服务的ISS,得到了相同的结果。 使用相同凭据从本地完美连