可以每秒向服务器发送 xmlhttprequest 吗?
Is it ok to send xmlhttprequest to a server every second?
我正在创建一个 Chrome 检查 gmail 收件箱的扩展程序。
我正在使用 xml 提要 url 来获取它:
https://mail.google.com/mail/u/0/feed/atom
为了更新,我使用的是 chrome.alarms API 每 10 秒发送一次 GET 请求。那太多了吗?如果不是,我也可以将其更改为 1 秒吗?为了向我发送提要信息,他们的服务器必须处理多少负载?
每 10 秒使用一次 XHR 看起来不错,但每一秒可能太多了。每个 XHR 请求都会创建新的连接,向服务器发送大量数据,并接收大量数据。如果您需要实时应用程序,请考虑改用 Websocket 或 Socket.io。它们非常轻巧、快速且易于使用。
通知APIs(gmail 似乎有)
如果您使用 a different technique such as "long polling" or "web sockets",您可以获得延迟更少的更新。这对于您不希望出现延迟的情况非常有用,例如实时聊天、基于网络的视频游戏或时间敏感的过程(例如拍卖或 ticket/order 队列)。对于不太实时的东西,例如电子邮件,它可能不太重要(请参阅此答案的最后一段)。
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 并没有真正针对刷新数据的频繁轮询进行优化。您 可以 发出相当数量的请求(甚至每秒一次或更多)。您可能不会杀死计算机或浏览器,甚至不会使它们 运行 变慢,只要请求和响应有效负载数据足够小,并且您对响应所做的 processing/dom 更改是最小的返回的数据没有变化。
假设您没有违反每个站点的速率限制,并且您发出的请求中的数据负载很小,那么最大的问题是您可能仍在浪费大量带宽。对于必须按 minute/megabyte 付款的人来说,这是一个问题。这在欧洲比在美国更常见(尽管它在蜂窝设备上也很常见)。
考虑一下您是否真的需要每秒检查一次电子邮件。每十秒一次可以吗?也许每一分钟?也许您的应用程序可以在您发送邮件时进行刷新,但在闲置时需要更长的时间来检查新邮件?在假设一切都必须不断更新之前,请考虑您要解决的用例。多等几秒钟会有什么中断?如果没有答案,那么您可以放心地放慢更新速度。如果有一些用例会被破坏或烦人,那么找出它为什么重要。看看是否有更好的方法来解决该用例,或者频繁更新是否真的是正确的答案。有时是!
我正在创建一个 Chrome 检查 gmail 收件箱的扩展程序。
我正在使用 xml 提要 url 来获取它: https://mail.google.com/mail/u/0/feed/atom
为了更新,我使用的是 chrome.alarms API 每 10 秒发送一次 GET 请求。那太多了吗?如果不是,我也可以将其更改为 1 秒吗?为了向我发送提要信息,他们的服务器必须处理多少负载?
每 10 秒使用一次 XHR 看起来不错,但每一秒可能太多了。每个 XHR 请求都会创建新的连接,向服务器发送大量数据,并接收大量数据。如果您需要实时应用程序,请考虑改用 Websocket 或 Socket.io。它们非常轻巧、快速且易于使用。
通知APIs(gmail 似乎有)
如果您使用 a different technique such as "long polling" or "web sockets",您可以获得延迟更少的更新。这对于您不希望出现延迟的情况非常有用,例如实时聊天、基于网络的视频游戏或时间敏感的过程(例如拍卖或 ticket/order 队列)。对于不太实时的东西,例如电子邮件,它可能不太重要(请参阅此答案的最后一段)。
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 并没有真正针对刷新数据的频繁轮询进行优化。您 可以 发出相当数量的请求(甚至每秒一次或更多)。您可能不会杀死计算机或浏览器,甚至不会使它们 运行 变慢,只要请求和响应有效负载数据足够小,并且您对响应所做的 processing/dom 更改是最小的返回的数据没有变化。
假设您没有违反每个站点的速率限制,并且您发出的请求中的数据负载很小,那么最大的问题是您可能仍在浪费大量带宽。对于必须按 minute/megabyte 付款的人来说,这是一个问题。这在欧洲比在美国更常见(尽管它在蜂窝设备上也很常见)。
考虑一下您是否真的需要每秒检查一次电子邮件。每十秒一次可以吗?也许每一分钟?也许您的应用程序可以在您发送邮件时进行刷新,但在闲置时需要更长的时间来检查新邮件?在假设一切都必须不断更新之前,请考虑您要解决的用例。多等几秒钟会有什么中断?如果没有答案,那么您可以放心地放慢更新速度。如果有一些用例会被破坏或烦人,那么找出它为什么重要。看看是否有更好的方法来解决该用例,或者频繁更新是否真的是正确的答案。有时是!