Javascript多个电话或一个大电话

时间:2016-05-24 17:50:22

标签: javascript performance

当回拨到同一台服务器时,我最好拨打一个更大的呼叫,而不是多个并行请求。

在我的特定情况下,假设服务器处理时间(不包括请求处理等)是线性的(例如,要求3位数据的1大调用与3小调用相同的处理时间)。

我知道如果我有1000个电话,我最好不要对它们进行批处理,以免产生所有网络开销。但如果我只有2,我假设并行请求可能更好。

这是对的吗? 如果是这样,截止点在哪里?

1 个答案:

答案 0 :(得分:1)

TL; DR:这取决于许多因素,这些因素在很大程度上取决于您的设置。如果性能是您的一个大问题,我会使用Wireshark等第三方应用程序运行测试,或者在服务器上编写一些性能测试代码。但一般来说,如果可能的话,通过连接它们来限制并行请求的数量。

一般来说,一些请求(并行)是可以的。现代浏览器将尝试尽可能在TCP流上并行运行它们。

话虽这么说,这开始变得臃肿,因为你使用HTTP / 1. *协议在你的服务器上做的每一个请求带有标题,这可能是巨大的,因为它们包含像推荐人和浏览器cookie。请求正文可能是一个字符,但请求本身会更大。

此外,场景随着新的传输协议HTTP / 2(甚至SPDY)而变化。这里的线路请求被区别对待,并不总是承担正常请求所做的所有头元数据的额外权重。因此,如果您的服务器和浏览器支持HTTP / 2,您可以并行运行更多请求。

但是,在大多数情况下,您将通过HTTP / 1. *运行,这意味着并行的几个请求可以看到严重的性能影响(在您描述的服务器处理时间的方案中)一次大负荷的总完工时间。

还有另外一件事需要考虑,这取决于应用程序:这些数据何时重要?如果您将大量小请求批量处理为一个较大的请求,则在整个操作完成服务器端之前,所有返回数据都不会返回。如果您需要更快地显示数据,或者您希望逐步加载以适应较慢的网络条件,那么对于多个小请求,性能权衡可能是值得的。

希望这个解释有所帮助。

绝对阅读FAQ for HTTP/2:它们还涵盖了您在描述的方案中遇到的HTTP / 1. *时遇到的一些性能问题