[英]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 个请求不是问题。 仅当服务器响应时间很大时才会成为问题。 所以最有可能的根本问题是服务器端的性能
这些解决方案是可能的:
更新:
给那些必须下载静态资源并且有麻烦的人的建议......
检查资源大小并在可能的情况下进行优化
使用 HTTP2 - 它在请求之间共享连接,因此服务器将减少加载并响应更快,主要是因为它不需要为每个请求建立单独的 SSL 连接(网络是安全的新星时代,每个人都使用 HTTPS)
HTTP 规范将并行请求的数量限制为单个域。 这留下了使用多个不同域(或子域)来增加并行请求数量以下载所需资源的机会
只是为了扩展 Charly Koza 的答案,因为这有一些限制,具体取决于用户数量等。
您应该考虑的第一件事是使用 CDN,我假设您已经这样做了。
您只访问一台服务器这一事实不是问题,浏览器将允许基于 DNS 主机而不仅仅是 IP 的并发连接。
如果您有权访问 DNS 管理并且可以动态生成新的子域,请查看 CloudFlare 的 API 等免费服务。
或者,创建一个通配符域,这将允许任何子域指向 1 个服务器。
通过这种方式,在您的服务器端,您可以识别用户是否已经有 X 数量的活动连接,如果是,则可以执行以下场景:
newDomainRandom.domain.com
这里有很多伪工作,但这更多的是网络问题,而不是编码问题。
不过,对这种方法的强制性警告:
在网站上使用 301 重定向没有限制。 您可以实现超过 100k 的 301 重定向而不会受到任何惩罚。 但是:太多的 301 重定向会给服务器带来不必要的负载并降低速度。
我有一个数据驱动的应用程序。 ...我有谷歌地图、数据透视图、图表和网格
在您提到的评论中,数据来自不同的提供者,以防它们位于不同的域 - 尝试使用 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.