gpt4 book ai didi

polymer - 服务 worker : How to build "Fresh" version of website for each new deployment?

转载 作者:行者123 更新时间:2023-12-04 20:33:35 25 4
gpt4 key购买 nike

问题

我在生产中的网站(使用 Polymer Shop 模板构建)存在问题,尽管我进行了新的和改进的部署,但该网站仍提供旧版本的代码。

我正在使用 Polymer CLI $ polymer build命令与 Firebase 工具一起使用 $ firebase deploy命令将更改推送到 Firebase 托管。部署完成后,我导航到该网站只看到没有更新的更改:

  • Chrome :我首先看到网站的旧版本,并且必须“硬刷新”才能显示更改。
  • 火狐:我首先看到网站的旧版本,并且必须“硬刷新”才能显示更改。


  • Here's the before n' after shot:



    enter image description here

    服务 worker 工作流程?

    我试图找出最好的工作流程是什么。我想进行设置,以便每次进行新部署时,整个站点都被清除干净,服务人员通过互联网重置自己,我将 100% 确保现有用户将获得新部署的体验

    with out having to hard refresh or use incognito mode.



    我是不是该...
  • 删除 service worker 并在没有它的情况下部署新版本(坏主意)?
  • 在 Firebase 控制台中创建一个“新项目”并重新链接自定义域(乏味)?
  • 在 Firebase 控制台中找到“魔术按钮”以进行重置(是否存在)?
  • 编辑 sw-precache-config.js文件(不确定如何)?
  • $ polymer build 中处理此问题配置 sw-precache (不确定如何)?
  • 一些甚至不知道的很棒的东西 ¯\_(ツ)_/¯ ?


  • 我知道问题存在于 sw-precache-config.js 内部文件,但我不确定这是否是我应该解决的地方。
    module.exports = {
    staticFileGlobs: [
    '/index.html',
    '/manifest.json',
    '/bower_components/webcomponentsjs/webcomponents-lite.min.js',
    '/images/*'
    ],
    navigateFallback: '/index.html',
    navigateFallbackWhitelist: [/^(?!.*\.html$|\/data\/).*/],
    runtimeCaching: [
    {
    urlPattern: /\/data\/images\/.*/,
    handler: 'cacheFirst',
    options: {
    cache: {
    maxEntries: 200,
    name: 'items-cache'
    }
    }
    },
    {
    urlPattern: /\/data\/.*json/,
    handler: 'fastest',
    options: {
    cache: {
    maxEntries: 100,
    name: 'data-cache'
    }
    }
    }
    ]
    };

    Service Worker 是一个了不起的工具,我绝对希望在我的项目中使用它。我只需要学习如何驯服野兽。

    最佳答案

    我不知道 polymer ,但这是我通常与服务人员一起做的流程。
    - 在客户端我检查是否有更新,如果他/她想要更新,应用程序会通知用户。
    - 用户接受新版本,然后客户端向 sw 发送消息到 跳过观看 .
    client.js:

    navigator.serviceWorker.register('/serviceWorker.js').then(function(reg) {
    reg.addEventListener('updatefound', function() {

    reg.installing.addEventListener('statechange', function() {

    if (reg.installing.state == 'installed') {
    // Notify the user, there is a app new version.
    // User accept
    reg.installing.postMessage({msg: 'skipwaiting'});
    }
    });
    });
    });

    - 在 service worker 中听 留言 如果用户接受新版本,则跳过。
    serviceWorker.js:
    self.addEventListener('message', function(event) {
    if (event.data.msg === 'skipwaiting') {
    self.skipWaiting();
    }
    });

    客户端在 Service Worker 更改状态后刷新应用程序。
    client.js:
    let refreshing;

    navigator.serviceWorker.addEventListener('controllerchange', function() {
    if (refreshing)
    return;
    window.location.reload();
    refreshing = true;
    });

    也许这可以给你一个想法。

    关于polymer - 服务 worker : How to build "Fresh" version of website for each new deployment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40446098/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com