C'è un aumento delle prestazioni per riutilizzare lo stesso handle. Vedi: Reusing the same curl handle. Big performance increase?
Se non è necessario le richieste di essere sincrona, è possibile utilizzare il curl_multi_ * funzioni (ad esempio curl_multi_init, curl_multi_exec, etc.) che forniscono anche una grande spinta di prestazioni.
UPDATE:
Ho provato a tenere in panchina ricciolo con l'utilizzo di una nuova maniglia per ogni richiesta e utilizzando lo stesso handle con il seguente codice:
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>';
e ottenuto i seguenti risultati:
Curl without handle reuse: 8.5690529346466
Curl with handle reuse: 5.3703031539917
Quindi riutilizzare lo stesso handle fornisce effettivamente un aumento sostanziale delle prestazioni quando ci si connette allo stesso server più volte. Ho provato il collegamento a server diversi:
$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>';
e ottenuto il seguente risultato:
Curl without handle reuse: 3.7672290802002
Curl with handle reuse: 3.0146431922913
Ancora abbastanza un aumento delle prestazioni sostanziale.
Domanda piuttosto vaga senza vedere l'utilizzo e il modo in cui viene gestito il codice. –
Tendo ad errare sul lato dell'affidabilità, e le maniglie nuove sembrano meno problematiche perché lo stato avanzato di una richiesta sembra meno probabile che inquini le richieste future se si fa un nuovo handle. Detto questo, ho un processo che viene eseguito regolarmente per settimane, facendo quasi un milione di richieste http sullo stesso handle di ricciolo. Sono richieste HTTP molto semplici a una singola API su un singolo dominio. Non ho riscontrato problemi. – goat
Possibile duplicato di [Quando utilizzare curl funzione cURL \ _close?] (Http://stackoverflow.com/questions/3849857/when-to-use-curls-function-curl-close) –