Es gibt eine Leistungssteigerung bei der Wiederverwendung desselben Griffs. Siehe: Reusing the same curl handle. Big performance increase?
Wenn Sie nicht die Anforderungen müssen synchron sein, sollten Sie die curl_multi_ * Funktionen (z curl_multi_init, curl_multi_exec usw.), die auch eine große Leistungssteigerung bieten.
UPDATE:
Ich habe versucht, ein neues Handle mit der Verwendung für jede Anforderung curl benching und den gleichen Griff mit dem folgenden Code:
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>';
und bekam folgende Ergebnisse:
Curl without handle reuse: 8.5690529346466
Curl with handle reuse: 5.3703031539917
Die Wiederverwendung des gleichen Handles bietet tatsächlich eine erhebliche Leistungssteigerung, wenn mehrere Verbindungen zum selben Server hergestellt werden. Ich habe versucht, auf verschiedenen Servern verbinden:
$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>';
Und bekam folgendes Ergebnis:
Curl without handle reuse: 3.7672290802002
Curl with handle reuse: 3.0146431922913
noch eine ganz erhebliche Leistungssteigerung.
Ziemlich vage Frage, ohne die Verwendung und wie der Code behandelt wird. –
Ich tendiere dazu, auf der Zuverlässigkeitsseite zu irren, und frische Handles scheinen weniger problematisch, weil übrig gebliebener Zustand aus einer Anfrage weniger wahrscheinlich ist, zukünftige Anforderungen zu verschmutzen, wenn Sie einen neuen Griff machen. Nachdem dies gesagt wurde, habe ich einen Prozess, der regelmäßig wochenlang läuft und fast eine Million HTTP-Anfragen auf demselben Curl-Handle macht. Sie sind sehr einfache HTTP-Anfragen an eine einzelne API in einer einzigen Domäne. Ich habe keine Probleme erlebt. – goat
Mögliche Duplikate von [Wann cURLs Funktion curl \ _close verwenden?] (Http://stackoverflow.com/questions/3849857/when-to-use-curls-function-curl-close) –