0

我们希望每 3 秒检查一次数据库中是否有任何更新,使用 jquery $.ajax。技术很清楚,但有什么理由不触发这么多 ajax 调用?(浏览器、缓存、性能等)。Web 应用程序每天在每个客户端上运行大约 10 小时。我们正在使用火狐。

4

4 回答 4

1

Ajax 调用的含义不是在客户端(浏览器,...),而是在服务器端。例如,每个 ajax 调用都会在服务器上命中。IE。更多的带宽消耗,没有服务器请求命中增加,这反过来又增加了服务器负载等。Ajax 调用实际上是为了以服务器端影响为代价来增加客户端友好性。

问候,拉维

于 2013-04-05T23:03:16.610 回答
1

在实现无限重复 AJAX 调用之前,您应该仔细考虑,它们之间存在任意延迟。你是怎么想出3秒的?如果您打算以这种方式轮询服务器,则需要将请求频率降低到尽可能低的数量。以下是一些需要考虑的事情:

  • 你获取的数据真的会经常改变吗?
  • 你的服务器能否每 3 秒处理一次请求,单个请求的操作需要多长时间?
  • 您能否增加不活动后的延迟或根据先前的服务器响应猜测下一次延迟应该多长时间?
  • 您能否在窗口失去焦点时完全停止轮询,并在它再次处于前台时重新启动它。
  • 如果用户在网站上打开同一页面 10 次,您的服务器应识别并限制其响应,使用其中具有唯一值的 cookie(推荐)或基于客户端 IP 地址。

最重要的是,考虑使用 HTML 5 Web 套接字将数据“推送”到客户端,而不是轮询——大多数现代浏览器都支持这一点。如果 Web 套接字不可用,可以使用几个框架来回退到轮询 - 一个出色的 .NET 示例是SignalR

于 2013-04-05T23:14:31.947 回答
0

您正在寻找每 3 秒后的任何更改,这样,当您在短时间内连续获取数据时,流量会增加。它还可能不断增加浏览器端的内存使用量。由于您需要检查数据库中的任何更新,您可以选择其他任何替代方案,例如 Sheepjax、Comet 或 SignalR。(SignalR 通常将数据广播给所有用户,彗星需要许可证)。希望这可以帮助你。

于 2013-04-06T11:55:17.207 回答
0

我看到很多应用程序每 5 秒左右发出一次请求,例如遥控器(网络播放器)或聊天。所以这对浏览器来说应该不是问题。

一个好的做法是在发出新请求之前等待答案,这意味着例如不使用 setInterval 触发请求。(如果用户失去连接,会阻止打开太多连接)。还要验证与答案相关的所有计算是否在收到下一个答案时完成。

如果您可以在服务器端访问它,请将您的服务器配置为设置 http 标头 Connection: Keep-Alive,这样您就不会为每个请求增加太多 TCP 开销。这可以大大加快小请求。

我看到的最后一点当然是验证您的服务器是否能够回答这么多请求。

于 2013-04-05T23:09:36.910 回答