【问题标题】:AJAX - how to determine best polling frequency?AJAX - 如何确定最佳轮询频率?
【发布时间】:2011-01-02 21:03:36
【问题描述】:

我正在为带有内置网络服务器的小型嵌入式设备构建新功能。它有一个基于 Javascript AJAX 的基本 Web 界面。我今天遇到了一个问题,我有一个 setInterval 每 500 毫秒调用一次 AJAX 轮询函数,但是在 XHR 监控的 Firebug 中,我会看到很多“中止”。当嵌入端发生变化时,Web UI 似乎没有可靠地更新。我还在 Firebug 中注意到 XHR 负载将需要接近 500 毫秒。我将 AJAX 轮询频率更改为 1000 毫秒,这解决了问题。但如果我的分析是正确的,如果嵌入式端开始加载接近 1000 毫秒,问题可能会再次出现。

所以我的问题是,有没有办法确定最佳轮询频率?您希望尽可能频繁地更新 UI,但又不想使服务器超载(在我的情况下这非常慢且有限)。此外,在 Firebug XHR 网络视图中,“中止”实际上意味着什么?

谢谢, 弗雷德

【问题讨论】:

    标签: javascript ajax firebug embedding


    【解决方案1】:

    不要使用 setInterval,在收到响应后使用 setTimeout 发起另一个请求。

    【讨论】:

    • 好的,好主意,但是如果您不知道服务器需要多长时间才能给您响应,您应该将超时设置为什么值?
    • 您希望在两次更新之间等待多长时间?您所说的只是我想在收到回复后 X 毫秒拨打电话。这不关心服务器需要多长时间。
    【解决方案2】:

    500 毫秒太频繁了。尝试 2 秒,一旦成功就向后工作。此外,您可能想做一些事情,比如从 2​​ 秒开始,如果在尝试了一些次数后不起作用,则增加到 5 秒(或其他任何时间)。我经常看到。

    注意,不得不投票很糟糕。如果您有 100 个并发用户的适度用户群,并且他们都在使用需要轮询的工作流,那么您的应用程序每秒可能会被数百个请求淹没。换句话说,轮询不能很好地扩展,除非你有资源水平地建立服务器。根据您的用例,最好只提交初始请求以异步启动长时间运行的进程,并告诉用户在 2 分钟后检查。

    让我问一下:完成您投票的任务需要多长时间?

    【讨论】:

    • 我同意,轮询似乎很笨拙。我认为 HTML5 中的新 websockets 看起来是一个很好的解决方案,但由于浏览器支持,我不能真正使用它,因为我的用户几乎可以使用任何浏览器。
    • 我正在开发的产品很可能一次只连接一个用户,但硬件的功率非常低。我的 Javascript 只是在 AJAX 调用中从嵌入式系统获取一些状态信息,因此处理这些信息不应该超过几毫秒,但整个 TCP/IP 堆栈和 HTTP 服务器的处理可能需要 100 毫秒. Firebug 网络监视器似乎表明该设备需要大约 500 毫秒来响应,因此我最初 500 毫秒的轮询周期太频繁了。
    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    相关资源
    最近更新 更多