我正在尝试列出40,000个项目并为每个项目运行json请求。这个过程非常慢,我怀疑是因为每个json请求都在下一个请求开始之前完成。
$result = mysql_query("SELECT * FROM $tableName");
while($row = mysql_fetch_array($result))
{
checkRank($row['Domain']);
}
checkRank正在运行以下内容:
$json = file_get_contents($jsonurl,0,null,null);
我想我一次可以运行10个checkRank来加速这个过程?还有其他想法/建议吗?
更新
例如,这个循环在27秒内贯穿我的阵列。
for ($i=0; $i<=100; $i++) {
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
echo "checking " . $i . "<br/>";
}
下面的循环使用相同的数组需要40秒。
for ($i=0; $i<=100; $i++) {
checkRank($domains[$i]);
echo "checking " . $i . "<br/>";
}
答案 0 :(得分:1)
除非您还没有提到其他内容,否则执行此操作的最佳方法是执行一个JSON请求并将项目传递给它,并获得相同数量的结果。这样,您可以最小化服务器响应时间。我不确定你是否想发送40,000个项目,你可能想把它分成两部分,但是你可以稍后测试一下。
所以checkRank()看起来像
function checkRank($domainsArray) {
$json = file_get_contents($jsonurl,$domainsArray);
}
答案 1 :(得分:1)
不确定这是否有用,因为我不使用PHP,但我确实发现了这一点。
答案 2 :(得分:1)
...很遗憾,我今天在Stack Overflow上看到PHP无法支持线程,因为它需要对语言进行根本性改变......
答案 3 :(得分:0)
http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/
这似乎是加快处理速度的好方法。感谢所有输入人员。