执行100万个AJAX请求的有效方式

时间:2014-10-26 12:29:50

标签: ajax loops request

我想用AJAX调用100万个不同的URL。

我所做的是(使用Javascript,jQuery):

var numbers = [1, 2, 3...1000000]; // numbers.length = 1000000
$(function () {
    $.each(numbers, function(key, val) {
        $.ajax({
            url: '/getter.php',
            data: { id: val},
            success: function () {
                console.info(id);
            }
        });
    });
});

我循环超过100万个整数,然后将它们传递给我的getter.php(这个数字做得很酷)。

问题是在我得到Google Chrome浏览器死机的约1.5k的请求之后。

我知道我这样做是无效的,这就是我寻求帮助的原因 - 如何正确地做到这一点?如何获取请求一个PHP脚本100万次(JavaScript不需要!)?

1 个答案:

答案 0 :(得分:0)

您可以在php脚本和请求数据的客户端之间使用持久连接。

我认为你正在对你所呼叫的单个请求的生存时间进行限制。此外,HTTP请求还充当请求 - 响应的原因,当您将它放在foreach语句中时,每个单独的语句都将单独处理,如:

 1. iteration: GET /getter.php with value 1 .... wait... Oh theres a response
 2. iteration GET /getter.php with value 2 .... wait Oh another response

这是一个看似漫长而错误的过程,你可能已经想到了。

另一种方法是设置一个持久套接字,其功能类似于TCP procotol:

 1. open the connection
 2. send all the data
 3. close the connection

您是否考虑过尝试使用websocket? 这是一些教程: HTML5websocket http://www.tutorialspoint.com/html5/html5_websocket.htm

PHP套接字: http://www.phpbuilder.com/articles/application-architecture/optimization/creating-real-time-applications-with-php-and-websockets.html

编辑: 另请参阅本文关于AJAX和websocket的区别。

"如果您不赶时间,AJAX非常棒,但如果您移动大量数据,那么每次创建HTTP连接的开销将成为瓶颈。您需要持久连接。此外,AJAX始终必须轮询服务器以获取数据,而不是通过服务器的推送来接收数据。如果你想要速度和效率,你需要WebSockets。"

http://blog.safe.com/2014/08/websockets-ajax-webhooks-comparison/