网站上的实时更新 - 每秒 1 个 ajax 是不好的做法?

Posted

技术标签:

【中文标题】网站上的实时更新 - 每秒 1 个 ajax 是不好的做法?【英文标题】:Live updates on website - 1 ajax per second is bad practice? 【发布时间】:2018-04-24 00:27:46 【问题描述】:

我有一个网站,每个用户可以有多个订单。每个订单都有自己的状态。后台进程,根据需要不断更新每个订单的状态。我想实时通知用户他的订单状态。因此,我开发了一个 API 端点,它返回给定用户的所有订单。 在客户端,我开发了一个显示订单的 React 组件,然后每秒向 API 执行一个 AJAX 请求以获取所有订单及其状态,然后 React 将在必要时自动更新。

每秒进行 1 次 AJAX 调用以获取用户的所有订单是一种不好的做法吗?我还能采取哪些其他策略?

【问题讨论】:

【参考方案1】:

是的,是的。您可以使用 Socket 来完成此操作。看看Socket.IO

编辑:我的意思是,为什么要使用 AJAX 来模拟可以通过为其设计的功能来完成的任务?套接字就是用来做这种事情的。

想象一下,如果您的用户失去了互联网连接。使用 Socket.IO,您可以很好地处理这个问题。但我不认为使用 AJAX 会那么容易。

考虑到可扩展性,Socket.IO 被设计为在任何传输上都具有高性能。它基于可能的连接而优雅地降级的方式非常棒,这意味着您的服务器将尽可能少地过载,同时仍能覆盖尽可能多的受众。

AJAX 可以解决问题,但它不是最好的设计。

【讨论】:

您能详细说明一下吗?为什么这是不好的做法? socket 更好,因为它基于事件发出建立连接 嘿@Ivan,刚刚编辑了我的答案,谈到为什么在这种情况下我会使用套接字而不是 ajax。【参考方案2】:

对于这个问题没有一个适合所有答案的解决方案。

首先,这不是一个聊天应用程序,不到 1 秒的延迟不会对用户体验产生太大影响(如果有的话)。

所以这给我们留下了技术原因,这实际上取决于许多因素:

您有多少用户(总负载),有多少并发用户在等待他们的订单,您正在使用什么基础架构,您是否还有其他重要的事情要构建,或者您只是想花更多时间编写代码来娱乐?

如果您有少数用户,那么每秒查询一次并没有什么问题,这很容易,维护开销也更少,而且您说您已经对其进行了编码。

如果您有几十个或更多并发用户等待状态,最好使用 Websockets。

在基础设施方面,太多的 websocket 很昂贵(一些云托管对 socket 的数量有限制),所以如果你想走这条路,请记住这一点。

【讨论】:

以上是关于网站上的实时更新 - 每秒 1 个 ajax 是不好的做法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AJAX 和 Django 从 SQL 数据库更新网站上的字段数据

使用 nodejs 和 mqtt 在网站上的实时内容

如何在不同计算机上的用户之间共享网站上的实时更新?

是否可以用 JavaScript 制作实时网络游戏

ajax 在运行脚本之前检查用户是不是登录

Drupal 实时搜索结果