我想用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不需要!)?
答案 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
编辑: 另请参阅本文关于AJAX和websocket的区别。
"如果您不赶时间,AJAX非常棒,但如果您移动大量数据,那么每次创建HTTP连接的开销将成为瓶颈。您需要持久连接。此外,AJAX始终必须轮询服务器以获取数据,而不是通过服务器的推送来接收数据。如果你想要速度和效率,你需要WebSockets。"
http://blog.safe.com/2014/08/websockets-ajax-webhooks-comparison/