【问题标题】:PWA SwUpdate checkForUpdate() does nothingPWA SwUpdate checkForUpdate() 什么都不做
【发布时间】:2023-04-08 06:02:02
【问题描述】:

我以角度阅读了服务人员的文档,但我很难理解方法 checkForUpdate() 的目的。

checkForUpdate() 有什么用法吗,据我理解正确,这个方法返回一个 Promise,表示检查是否成功完成,但不表示是否有新版本可用。

我的问题:

  • 如果没有 checkForUpdate(),新版本的下载仍然会进行,对吗?
  • 是否有 checkForUpdate() 有用的示例?

不直接相关的问题:

  • pwa 的更新很慢(~20-30 秒),有没有办法让更新过程更快?

【问题讨论】:

    标签: angular optimization progressive-web-apps


    【解决方案1】:

    关于更新

    是的,Service Worker 仍会下载更新。但您需要触发更新激活,否则仍将使用旧版本。

    例如。

    this.serviceWorkerUpdates.checkForUpdate().then(() => {
     /*
       do stuff here..
     you might want to run 
     this.serviceWorkerUpdates.available.subscribe()
     and if there are new versions.. take some action.. 
    */
    }));
    

    Service Worker 完成的自动更新只会触发一次,您可能需要手动检查是否已部署新版本。..

    也许您有一个管理应用程序,用户并不会经常重新加载应用程序,但您仍然需要他们拥有最新版本。 ?

    更新缓慢

    为什么更新很慢可能是因为 appState 在 20-30 秒过后才稳定.. 取决于您的应用。

    您可以尝试立即注册 service worker,而不是让它等待应用稳定

    使用名为registerImmediately 的策略来做到这一点。

        ServiceWorkerModule.register('ngsw-worker.js', {
          enabled: environment.production,
          registrationStrategy: 'registerImmediately',
        }),
    

    【讨论】:

    • 但是 Angular 页面上的文档说 checkForUpdate 不能判断新版本是否可用,因此您建议手动检查是否已部署新版本用 checkForUpdate 处理吧?
    • 你的例子在可用之前调用 activateUpdate 我认为是错误的,因为如果更新文件不存在,当调用 activateUpdate 时,什么都不会发生,对吧?
    • 你是对的..我输入了错误的方法..我已经更新到checkForUpdate :)
    • 思路是先触发checkForUpdate,然后订阅this.serviceWorkerUpdates.available.subscribe()
    • @YusufIpek 这能解决你最初的问题吗?
    猜你喜欢
    • 2021-09-07
    • 2019-03-08
    • 2016-12-24
    • 2017-04-18
    • 2011-08-03
    • 2014-05-11
    • 2014-09-10
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多