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

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

夔庆
2023-03-14

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

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

一切都进行得很顺利,但有些事情感觉不“对”。

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

// TODO: Send subscription to application server

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

对于Web推送API,这是预期的方法吗?

非常感谢

共有1个答案

裴英才
2023-03-14

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

  1. 在浏览器设置中,用户可能已将权限从blocked更改为promisted(或默认),因此您希望创建订阅并将其发送到服务器
  2. 订阅终结点可能会因不同的原因而更改,因此您需要确保当前终结点已发送到服务器(前一个终结点将返回410 Gone

以上几点与性能之间的折衷办法是,只在给定页面(例如主页)上向服务器发送订阅。

 类似资料:
  • 我使用Eclipse数据库开发视角手动创建了一个模式和几个表。但是每当我试图从代码访问表时,我都会得到“架构不存在”错误。但是,如果我在使用这些表之前在程序中创建这些表,一切都会顺利。每次连接到数据库时都必须创建表吗?因为,我正在测试我的代码,我必须多次重启项目。

  • 问题内容: 我正在将Selenium WebDriver与Java一起使用。我试图访问该页面中的“登录ID”文本框,但是每次登录和注销时,针对“登录ID”文本框的XPath值都会更改,因此我无法检测到“登录ID”文本框每次都使用相同的代码。 我需要在代码中进行哪些修改,以便能够通过单个代码访问所有动态XPath? 问题答案: 以下是可能用作解决方法的示例 xpath的类型: 多个匹配项: 部分匹配

  • 我有一个方法,它使用< code>java.util.Date和< code>java.util.Calendar对象为我提供时区的当前时间,我的一个同事建议添加try catch with < code > Exception e to catch。但是当我在google上搜索这些类的内置方法抛出的异常时,我没有发现任何异常。 我还需要用try和catch来包装代码吗???块是否需要try-ca

  • 我目前正在建立一个网站,通过JavaScript使用自定义快速导航。 如果用户按右键,他将被导航到“我的页面列表”中的下一页,通过按ALT Right或Left键,他可以在浏览器历史记录中前后导航。 这是我当前的代码: 这一切都很好,除了一个小问题:假设我想返回三页-如果我是一个有逻辑思维的人,我会先按ALT Left返回一个站点,然后当我在上一个站点上时,只需按住ALT,然后再次按Left返回一

  • 问题内容: 快速的问题,我已经尝试自己弄清楚这一点,但是在试图弄清页面为什么或如何重新加载以及正在/不应该执行其应做的工作时,使用会话变量可能会造成混淆。 在任何(非脚本)情况下,页面重新加载(使用JavaScript,f5,ctrl + f5,浏览器重新加载按钮等)是否会导致表单重新发布? (这与在C#代码中使用IfPost分支有关,例如下面的示例代码): 我只是需要知道在这里期望什么,以便可以

  • 我告诉Selenium等到它看到一个元素-Selenium看到它我告诉Selenium点击这个元素,它是一个链接到一个新页面的按钮-Selenium点击它。 问题是点击之后,Selenium然后会等到下一个页面满载(页面有时候一秒钟就加载了,或者等了好久,我觉得是那个页面上的Zen Desk Live Chat的问题)。 当它被完全加载时,它会抛出一个错误,说它点击的元素不能看到(当然不能看到,因