Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每秒向服务器发送xmlhttprequest可以吗?_Javascript_Ajax_Google Chrome_Gmail - Fatal编程技术网

Javascript 每秒向服务器发送xmlhttprequest可以吗?

Javascript 每秒向服务器发送xmlhttprequest可以吗?,javascript,ajax,google-chrome,gmail,Javascript,Ajax,Google Chrome,Gmail,我正在创建一个检查gmail收件箱的Chrome扩展 我正在使用xml提要url获取它: 为了更新,我使用了chrome.alarms API,它每10秒发送一次GET请求。这是不是太多了?如果不是,我能把它也改成1秒吗?他们的服务器需要处理多少负载才能向我发送提要信息?每10秒使用一次XHR看起来不错,但每秒可能太多。每个XHR请求都会创建新连接,向服务器发送大量数据,并接收大量数据。如果您需要一个实时应用程序,请考虑使用WebSoCor或SoCKE.IO来代替。它们非常轻量级、快速且易于使

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

我正在使用xml提要url获取它:


为了更新,我使用了chrome.alarms API,它每10秒发送一次GET请求。这是不是太多了?如果不是,我能把它也改成1秒吗?他们的服务器需要处理多少负载才能向我发送提要信息?

每10秒使用一次XHR看起来不错,但每秒可能太多。每个XHR请求都会创建新连接,向服务器发送大量数据,并接收大量数据。如果您需要一个实时应用程序,请考虑使用WebSoCor或SoCKE.IO来代替。它们非常轻量级、快速且易于使用。

通知API(gmail似乎有它们) 如果使用,您可以以更少的延迟获得更新。这对于不需要延迟的事情非常有用,例如实时聊天、基于web的视频游戏或时间敏感的过程(如拍卖或票务/订单队列)。对于一些不太实时的东西,比如电子邮件,它可能就不那么重要了(参见本答案的最后一段)


HTTP轮询 大多数web服务器能够经受住每秒一次的调用,而不会破坏其站点。如果他们不能做到这一点,那么他们就会面临一些严重的安全问题(或者更糟糕的是,如果他们的站点有足够多的漏洞,在过载时会丢失数据)

谷歌有大型服务器和保护,所以你不必担心他们能处理什么,只要他们不阻止你。谷歌可能会限制对他们gmail API的调用,如果你调用他们的API的次数超过他们喜欢的次数,你可能最终会被用户扼杀

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

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


考虑一下你是否真的需要每秒钟检查一次电子邮件。每十秒钟可以吗?也许每一分钟?也许你的应用程序可以在你发送邮件时进行刷新,但在空闲时检查新邮件需要更长的时间?在假设所有内容都必须不断更新之前,先考虑一下您正在解决的用例。多等几秒钟会怎么样?如果答案是“无”,则可以安全地减慢更新速度。如果有一些用例可能会被破坏或令人讨厌,那么请找出它为什么重要。看看是否有更好的方法来解决这个用例,或者频繁更新是否是正确的答案。有时候是这样

每10秒使用一次XHR看起来不错,但每秒钟可能太多了。每个XHR请求新的连接,向服务器发送大量数据,并接收大量数据。如果你需要一个实时应用程序,请考虑使用WebSoC或SoCKE.IO而不是XHR。它们很轻,很快,也很容易使用。谢谢你给我指出了正确的方向!我会调查的。由于没有其他答案,您能否将您的评论作为答案,以便我可以接受?如果启用了HTTP keep alives,则每个XHR请求可能不需要新的连接。从技术上讲,您是正确的。但是HTTP不是为实时通信而设计的。Websocket是为您设计的。是的,这不是重点。我只是想指出声明中的一个缺陷,即每个HTTP请求都是一个新连接。我知道您想跟我说什么,但HTTP 1.1中提供了keep alives选项,因此从另一方面来说,您错了。你应该说“在HTTP 1.1中,如果启用了保持有效性,则不会创建新连接。非常感谢您冗长的信息性回答!“我有很多东西要学,这对我有很大帮助。”斯莱瑟-我倾向于写很多东西。很高兴有帮助:)干杯@Slayther至于
长轮询
,这个名字有点让人困惑。在您当前的设计中,您正在进行“轮询”,如果您不经常这样做,它可能看起来像是“长轮询”。不过,这不是正确的称呼。“长轮询”是指一种特定的技术,它使用HTTP从服务器向客户端进行低延迟推送。他们通过保持连接,直到有新数据发送到客户端,然后立即发送。这样,服务器就不必等待客户端循环并再次请求数据,然后才能将其推出。长轮询要求服务器设计为支持它。客户端不需要任何新技术,可以使用Ajax。它的编写方式类似于普通的循环轮询。客户机只需确保一次只向服务器发送一个请求,即使请求可能需要几分钟或更长时间才能完成(因为服务器会一直保持打开状态,直到有数据为止)。现在这就更有意义了!哈哈,我花了一段时间才明白你的真正意思。当涉及到服务器和客户端到服务器的通信时,我对所有这些web技术仍然是新手。