在任何浏览器

时间:2016-09-14 08:39:21

标签: javascript jquery angularjs ajax http

我在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 - 限制为2。如果你是宽带,IE8是6,如果是你,则是2   拨号。

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

  

我在启动时有14个http调用到同一个服务器,这是加载实际页面需要很长时间的原因。如何通过并发ajax / http调用来提高我网站的性能

7 个答案:

答案 0 :(得分:9)

您可以做的是将负载分配给多个子域。您可以在这些客户端之间使用www1,www2,www3,www4和循环法,而不是仅使用www。

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

答案 1 :(得分:7)

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

这些解决方案是可能的:

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

答案 2 :(得分:5)

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

首先要注意的是使用CDN,我假设您已经完成了此操作。

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

如果您可以访问DNS管理并可以动态生成新的子域,请使用CloudFlare API之类的免费服务。

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

通过这种方式,您可以在服务器端确定用户是否已经有X个活动的连接,如果这样,则可以完成以下情形:

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

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

对此方法有强制警告:

  

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

答案 3 :(得分:5)

  

如何拨打超过浏览器设置为一个的最大http通话次数   域

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

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

答案 4 :(得分:0)

  

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

在评论中,您提到数据来自不同的提供程序,以防它们位于不同的域中-请尝试使用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请求时,它最多可以节省几百毫秒。

另请参阅:

答案 5 :(得分:0)

只需使用Http2。 Http1对并发连接有限制,具体取决于浏览器的6-10。

答案 6 :(得分:0)

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

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

要实现上述目标,您需要在HTTP连接或已升级到websocket的连接上运行的一些简短的protocol / api。下面是提供异步响应消息功能的一些替代方法: