繁体   English   中英

增加并发 HTTP 调用

[英]Increase Concurrent HTTP calls

我在 SO 上为此浏览了很多帖子,但没有找到任何合适的解决方案

我从最大并发连接到一个域限制的答案之一中得到它

IE 6 and 7:      2
IE 8:            6
IE 9:            6
IE 10:           8
IE 11:           8
Firefox 2:       2
Firefox 3:       6
Firefox 4 to 46: 6
Opera 9.63:      4
Opera 10:        8
Opera 11 and 12: 6
Chrome 1 and 2:  6
Chrome 3:        4
Chrome 4 to 23:  6
Safari 3 and 4:  4

如何向一个域调用超过浏览器设置的最大 http 调用数。

我经历了这个

您可以用来增加并发连接数的一个技巧是托管来自不同子域的图像。 这些将被视为单独的请求,每个域都将被限制为并发最大值。

IE6、IE7 - 限制为两个。 IE8 是 6 宽带,2 拨号。

但我没有这样的场景。 我正在获取指向一台 Web 服务器的特定数据。 我将如何克服这一点。

我在开始时对同一台服务器进行了 14 次 http 调用,这就是加载实际页面需要很长时间的原因。 如何通过并发 ajax/http 调用提高我网站的性能

您可以做的是将负载分派到许多子域。 不是只使用 www,而是在这些客户端之间使用 www1、www2、www3、www4 和循环。

您需要配置您的网络服务器,以便 www* 子域最终到达相同的位置。

14 个请求不是问题。 仅当服务器响应时间很大时才会成为问题。 所以最有可能的根本问题是服务器端的性能

这些解决方案是可能的:

  • 使用 HTTP 缓存(服务器应发送相应的标头)
  • 在中间使用缓存(例如 CDN、Varnish)
  • 优化服务器端
    • 内容相关:
      • 将多个请求合二为一
      • 删除请求中的重复信息
      • 不加载客户端不呈现的信息
    • 在服务器端使用缓存
    • 等等......任何其他方法......有很多。

更新:

给那些必须下载静态资源并且有麻烦的人的建议......

  1. 检查资源大小并在可能的情况下进行优化

  2. 使用 HTTP2 - 它在请求之间共享连接,因此服务器将减少加载并响应更快,主要是因为它不需要为每个请求建立单独的 SSL 连接(网络是安全的新星时代,每个人都使用 HTTPS)

  3. HTTP 规范将并行请求的数量限制为单个域。 这留下了使用多个不同域(或子域)来增加并行请求数量以下载所需资源的机会

只是为了扩展 Charly Koza 的答案,因为这有一些限制,具体取决于用户数量等。

您应该考虑的第一件事是使用 CDN,我假设您已经这样做了。

您只访问一台服务器这一事实不是问题,浏览器将允许基于 DNS 主机而不仅仅是 IP 的并发连接。

如果您有权访问 DNS 管理并且可以动态生成新的子域,请查看 CloudFlare 的 API 等免费服务。

或者,创建一个通配符域,这将允许任何子域指向 1 个服务器。

通过这种方式,在您的服务器端,您可以识别用户是否已经有 X 数量的活动连接,如果是,则可以执行以下场景:

  • 在同一个IP上动态创建一个新的子域,或者如果使用通配符,则创建一个随机子域newDomainRandom.domain.com
  • 然后向用户返回一个 301 重定向到新域,用户 Internet 客户端然后将其注册为到另一个域的新连接。

这里有很多伪工作,但这更多的是网络问题,而不是编码问题。

不过,对这种方法的强制性警告:

在网站上使用 301 重定向没有限制。 您可以实现超过 100k 的 301 重定向而不会受到任何惩罚。 但是:太多的 301 重定向会给服务器带来不必要的负载并降低速度。

如何向一个域调用超过浏览器设置的最大 http 调用数。

这是 HTTP/1.1 限制 (6-8),如果您能够更改服务器(将此问题标记为 http),最好的解决方案是使用HTTP/2RFC 7540 )而不是 HTTP/1.1。

HTTP/2 在单个连接上多路复用多个 HTTP 请求,请参见此 当 HTTP/1.1 的限制大致为 6-8 时,HTTP/2 没有标准限制,而是说建议此值 (SETTINGS_MAX_CONCURRENT_STREAMS) 不小于 100RFC 7540 )。 这个数字比 6-8 好。

我有一个数据驱动的应用程序。 ...我有谷歌地图、数据透视图、图表和网格

在您提到的评论中,数据来自不同的提供者,以防它们位于不同的域 - 尝试使用 dns-prefetch,即像这样:

   <link rel="dns-prefetch" href="http://www.your-data-domain-1.com/">
   <link rel="dns-prefetch" href="http://www.your-data-domain-2.com/">
   <link rel="dns-prefetch" href="http://www.3rd-party-service-1.com/">
   <link rel="dns-prefetch" href="http://www.3rd-party-service-2.com/">

您需要列出您通过 AJAX 调用的所有域,这些域不是您网站本身的实际域。

它会强制浏览器在读取和解析 HTML 数据后立即发送 DNS 请求,而不是在您的代码第一次从这些域请求数据时发送。 当浏览器实际对数据执行 AJAX 请求时,它最多可以为您节省数百毫秒。

也可以看看:

只需使用Http2。 Http1对并发连接数有限制,视浏览器而定,大约6-10个。

如果您的服务器能够同时执行任务,那么打开多个与其的连接没有任何附加价值,除了能够更早地更新您的 UI(在最慢的任务完成之前)。 例如,让用户在所有任务完成之前使用该页面 这提供了良好的用户体验。

但是,除了打开并行 http 连接之外,还有其他解决方案可以实现这一点 简而言之,您可以将所有端点合并到一个处理所有任务的端点下,并将每个完成任务的结果异步放置到响应中 然后客户端可以在每个任务完成时处理它的结果。

要实现上述目标,您需要一些在 http 连接或已升级到 websocket 的连接之上运行的协议/api。 下面有一些提供异步响应消息功能的替代方案:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM