그것은 디자인에 의한 generel의 문제이다 -가 아니라 코드 자체. 원격 URI에 대한 요청을 각각 50 개 이상 반복하는 for 루프를 수행하는 경우 원격 URI에서 응답 할 때까지 모든 요청이 대기하기 때문에 상황이 상당히 느려집니다. 예 : 요청이 완료 되려면 ~ 0.6 초가 걸리고 50을 곱하면 30 초가 소요됩니다.
다른 문제는 대부분의 웹 서버가 클라이언트 당 연결을 특정 금액으로 제한한다는 것입니다. 50 개의 요청을 동시에 수행 할 수 있다고해도 (현재는 아니지만), 일이 크게 가속화되지는 않습니다.
제 옵션에는 하나의 해결책이 있습니다 (깊은 변화가 없음) : exection 당 요청 당량을 변경하십시오. 예를 들어 청크를 만드십시오. (스크립트) 당 5-10 통화 만 호출하고 외부 호출 (예 : cron으로 실행)을 통해 호출합니다.
Todo : 현재 실행 상태를 저장 할 수있는 래퍼 함수를 빌드합니다 ("마지막 실행시에 1 - 10을 요청 했으므로 이제는 11-20을 호출해야합니다) 파일이나 데이터베이스에 저장하십시오 및 크론하여이 기능을 트리거 (안된)
예 코드를 더 선언].
[...]
private static $_chunks = 10; //amout of calls per run
public function cronAction() {
$lastrun = //here get last run parameter saved from local file or database
$this->crawl($lastrun);
}
private function crawl($lastrun) {
$limit = $this->_chunks + $lastrun;
for ($i = $lastrun; $i < limit; $i++)
{
[...] //do stuff here
}
//here set $lastrun parameter to new value inside local file/database
}
[...]