是否可以每秒将xmlhttprequest发送到服务器?

时间:2016-06-22 12:29:03

标签: javascript ajax google-chrome gmail

我正在创建一个检查gmail收件箱的Chrome扩展程序。

我正在使用xml feed url来获取它: https://mail.google.com/mail/u/0/feed/atom

为了更新,我使用的chrome.alarms API每隔10秒发送一次GET请求。太多了吗?如果没有,我可以将它改为1秒吗?他们的服务器需要处理多少负载才能向我发送Feed的信息?

2 个答案:

答案 0 :(得分:2)

每隔10秒使用XHR看起来不错,但每一秒都可能过多。每个XHR请求都会创建新连接,向服务器发送大量数据,并会收到大量数据。如果您需要实时应用,请考虑使用Websocket或Socket.io。它们非常轻便,快速且易于使用。

答案 1 :(得分:1)

通知API(gmail似乎有它们)

如果您使用a different technique such as "long polling" or "web sockets",则可以获得更少延迟的更新。这对于您不想延迟的事情非常有用,例如实时聊天,基于网络的视频游戏或时间敏感的过程,如拍卖或票务/订单队列。对于不那么实时的事情,例如电子邮件,这可能有点不那么重要了(参见本答复的最后一段)。

Gmail seems to have an API that is explicitly designed for fast notifications

HTTP轮询

大多数网络服务器可以经常被召唤一次,而不会杀死他们的网站。如果他们不能,那么他们会遇到一些严重的安全问题(Denial of Service attacks,或者更糟糕的是,如果他们的网站有足够的错误,以便在超载时遭受数据丢失)。

Google拥有强大的服务器和保护功能,因此您不必担心他们可以处理的问题,只要他们不会阻止您。 Google可能会限制对其gmail API的调用,如果您更多地调用他们的API,您最终可能会限制用户受到限制。 Consult their documentation to find out what their rate limiting policies are

为了更一般地回答您的问题,普通的HTTP并未真正针对刷新数据的频繁轮询进行优化。你可以发出相当数量的请求(甚至超过一秒或更多)。只要请求和响应有效负载数据足够小,您可能不会杀死计算机或浏览器甚至使它们运行缓慢,并且当数据返回时,您对响应所做的处理/ dom更改很少不变。

假设您没有违反每站点速率限制,并且在您正在进行的请求中拥有较小的数据负载,那么最大的问题是您可能仍然在浪费大量带宽。对于必须按分钟/兆字节付费的人来说,这是一个问题。这在欧洲比在美国更频繁(尽管它在蜂窝设备上也经常发生)。

考虑一下你是否真的需要每秒检查一次电子邮件。每十秒钟会好吗?也许每一分钟?也许你的应用程序可以在发送邮件时刷新,但是在空闲时检查新邮件需要更长时间?在假设必须不断更新所有内容之前,请考虑您正在解决的用例。什么会等待几秒钟休息?如果答案是什么,那么您可以安全地减慢更新速度。如果有用例会破坏或烦人,那么找出它为什么重要。看看是否有更好的方法来解决该用例,或者如果频繁更新实际上是正确的答案。有时它是!