【发布时间】:2022-01-18 07:40:15
【问题描述】:
我有三页。主页、聊天页面和带有聊天图标的顶部导航页面。当用户收到新消息时,我想在顶部导航中显示带有聊天图标的徽章。为此,我在聊天模型中维护了一个名为 see 的标志。这是一个布尔值。如果看到的是 false,我会统计为 false 的记录,并在带有聊天图标的徽章中显示计数。为此,我在顶部导航 ngOnit() 中编写了一个方法来检查聊天模型是否有任何看不见的消息。我觉得它会影响性能,因为如果每隔一秒点击一次 API。有没有比 setInterval 更好的方法。
顶部导航 TS
ngOnInit()
{
setInterval(() => {
//API Call
}, 1000);
}
【问题讨论】:
-
你可以创建一个 websocket 连接,这几乎就是创建它的确切用例,尽管你的服务器环境可能不支持它
-
除了 websockets 之外你还可以做的另一件事是使用指数退避来检查 API 以降低频率。例如,从每 1 秒检查一次开始,然后在 10 次迭代后,将轮询时间增加到 2 秒,然后是 4、8 等等,直到合理的最大值。如果输入/发送/接收新消息,请将间隔重置为 1 秒。这样一来,轮询在一系列谈话期间基本上是实时的,但在空闲期间略有延迟en.m.wikipedia.org/wiki/Exponential_backoff
-
你能给我一些关于如何用 websocket 做的参考吗?
-
您也可以考虑将服务器发送事件作为 Web Sockets 的替代方案。
标签: javascript angular typescript rest