Увеличение повторного использования одного и того же ручка. См: Reusing the same curl handle. Big performance increase?
Если вам не нужны запросы синхронными, рассмотреть вопрос об использовании curl_multi_ * функции (например, curl_multi_init, curl_multi_exec и т.д.), которые также обеспечивают большой прирост производительности.
UPDATE:
Я попытался жим завитка с использованием новой ручки для каждого запроса и используя ту же ручку со следующим кодом:
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
for ($i = 0; $i < 100; ++$i) {
$rand = rand();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/?rand=" . $rand);
curl_exec($ch);
curl_close($ch);
}
$end_time = microtime(true);
ob_end_clean();
echo 'Curl without handle reuse: ' . ($end_time - $start_time) . '<br>';
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
$ch = curl_init();
for ($i = 0; $i < 100; ++$i) {
$rand = rand();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/?rand=" . $rand);
curl_exec($ch);
}
curl_close($ch);
$end_time = microtime(true);
ob_end_clean();
echo 'Curl with handle reuse: ' . ($end_time - $start_time) . '<br>';
и получили следующие результаты:
Curl without handle reuse: 8.5690529346466
Curl with handle reuse: 5.3703031539917
Таким образом, повторное использование одного и того же ручка обеспечивает существенное увеличение производительности при одновременном подключении к одному и тому же серверу. Я попытался подключения к различным серверам:
$url_arr = array(
'http://www.google.com/',
'http://www.bing.com/',
'http://www.yahoo.com/',
'http://www.slashdot.org/',
'http://www.stackoverflow.com/',
'http://github.com/',
'http://www.harvard.edu/',
'http://www.gamefaqs.com/',
'http://www.mangaupdates.com/',
'http://www.cnn.com/'
);
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
foreach ($url_arr as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);
}
$end_time = microtime(true);
ob_end_clean();
echo 'Curl without handle reuse: ' . ($end_time - $start_time) . '<br>';
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
$ch = curl_init();
foreach ($url_arr as $url) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
}
curl_close($ch);
$end_time = microtime(true);
ob_end_clean();
echo 'Curl with handle reuse: ' . ($end_time - $start_time) . '<br>';
И получил следующий результат:
Curl without handle reuse: 3.7672290802002
Curl with handle reuse: 3.0146431922913
еще довольно значительный прирост производительности.
Довольно неопределенный вопрос, не видя использования и способа обработки кода. –
Я склонен ошибаться на стороне надежности, а свежие ручки кажутся менее проблематичными, потому что оставшееся состояние из запроса кажется менее вероятным загрязнять будущие запросы, если вы делаете новую ручку. С учетом сказанного, у меня есть процесс, который регулярно работает в течение нескольких недель, делая около миллиона http-запросов на одном ручке. Это очень простые HTTP-запросы к одному api в одном домене. Я не испытывал никаких проблем. – goat
Возможный дубликат [Когда использовать функцию cURLs curl \ _close?] (Http://stackoverflow.com/questions/3849857/when-to-use-curls-function-curl-close) –