真的有必要在每次页面加载时更新订阅吗?

Is it really necessary to update the subscription on every page load?

我目前正在开发一个允许用户订阅推送通知的网络应用程序。我们会将订阅存储在数据库中 table 映射到用户 ID,当需要发送通知时,我们将查找用户的订阅并发送通知。

我一直在遵循这个指南: https://developers.google.com/web/fundamentals/codelabs/push-notifications/

一切顺利,但感觉有些不对劲"right"。

在每次加载页面时,service worker 都会被注册,然后它会检查他们是否已经订阅,然后即使他们已经订阅它也会调用 updateSubscriptionOnServer(),其中包含以下注释:

// TODO: Send subscription to application server

这实际上意味着每个页面加载都将尝试将相同的订阅写回数据库。显然我们会在应用程序中处理它,但它似乎并不理想。

使用 Web 推送 API,这是预期的方法吗?

非常感谢

是的,在每次页面加载时将订阅发送到服务器可能很有用:

  1. 用户可能已将浏览器设置中的权限从 blocked 更改为 granted(或默认),因此您想创建订阅并将其发送到服务器
  2. 订阅端点可能因不同原因而改变,所以您需要确保当前端点发送到服务器(之前的端点将return 410 Gone

上述几点和性能之间的折衷可以是仅在给定页面(例如主页)上将订阅发送到服务器。