参考资料

  1. nginx 配置多个server
  2. Nginx文件下载服务器搭建详细说明以及案例
  3. Nginx如何用于反向代理?
  4. 如何识别Nginx遇到攻击时如何快速响应?
  5. Nginx静态资源服务器搭建详细说明以及案例
  6. Nginx在负载均衡中的角色
  7. Nginxexpires:页面缓存时间配置详细说明以及案例
  8. 如何防止勒索病毒攻击?
  1. 文件更新触发条件

    • 浏览器检测到Service Worker文件(sw.js)的字节级变化(即使内容不同但字节相同不会触发)。

  2. 更新流程

    • 下载新文件:浏览器在后台下载新Service Worker文件。

    • 安装阶段:触发install事件,新旧Worker共存。

    • 等待阶段:新Worker处于waiting状态,直到旧Worker控制的页面全部关闭。

    • 激活阶段:触发activate事件,新Worker接管控制。

  3. 强制立即更新方法

    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('/sw.js').then(reg => {
        reg.update();
      });
    }
  4. 跳过等待阶段
    install事件中调用self.skipWaiting()

    self.addEventListener('install', () => {
      self.skipWaiting();
    });
  5. 清理旧缓存
    activate事件中清理旧缓存:

    self.addEventListener('activate', event => {
      event.waitUntil(
        caches.keys().then(keys => {
          return Promise.all(keys.map(key => {
            if (key !== CURRENT_CACHE) {
              return caches.delete(key);
            }
          }));
        })
      );
    });
  6. 客户端刷新控制
    通过postMessage通知客户端刷新:

    self.addEventListener('activate', event => {
      self.clients.matchAll().then(clients => {
        clients.forEach(client => client.postMessage('sw-updated'));
      });
    });