Должен ли я закрывать cURL или нет?

У меня есть функция, которая вызывает 3 разных API, используя cURL несколько раз. Каждый результат API передается следующему API, называемому вложенными циклами, поэтому cURL в настоящее время открывается и закрывается более 500 раз.

Должен ли я оставлять cURL открытым для всей функции или нормально открывать и закрывать ее столько раз в одной функции?

Существует увеличение производительности для повторного использования одного и того же дескриптора. См. Повторное использование одной ручки. Большое увеличение производительности?

Если вам не нужны синхронные запросы, попробуйте использовать функции curl_multi_ * (например, curl_multi_init , curl_multi_exec и т. Д.), Которые также обеспечивают большой прирост производительности.

ОБНОВИТЬ:

Я попробовал скалолазание с использованием нового дескриптора для каждого запроса и используя тот же дескриптор со следующим кодом:

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 

Все еще довольно существенное увеличение производительности.