Có tăng hiệu suất để sử dụng lại cùng một tay cầm. Xem: Reusing the same curl handle. Big performance increase?
Nếu bạn không cần yêu cầu đồng bộ, hãy xem xét sử dụng các hàm curl_multi_ * (ví dụ: curl_multi_init, curl_multi_exec, v.v.).
UPDATE:
Tôi đã cố gắng benching curl với việc sử dụng một tay cầm mới cho mỗi yêu cầu và sử dụng tay cầm cùng với đoạn mã sau:
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>';
và nhận được kết quả như sau:
Curl without handle reuse: 8.5690529346466
Curl with handle reuse: 5.3703031539917
Vì vậy, việc sử dụng lại cùng một tay cầm thực sự cung cấp tăng hiệu suất đáng kể khi kết nối với cùng một máy chủ nhiều lần. Tôi cố gắng kết nối đến các máy chủ khác nhau:
$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>';
Và có kết quả sau:
Curl without handle reuse: 3.7672290802002
Curl with handle reuse: 3.0146431922913
Vẫn còn khá một hiệu suất tăng đáng kể.
Câu hỏi khá mơ hồ mà không thấy việc sử dụng và cách mã được xử lý. –
Tôi có xu hướng sai về phía độ tin cậy và các xử lý mới có vẻ ít vấn đề hơn vì trạng thái còn sót lại từ một yêu cầu dường như ít có khả năng gây ô nhiễm các yêu cầu trong tương lai nếu bạn thực hiện xử lý mới. Với điều đó, tôi có một quy trình thường xuyên chạy trong nhiều tuần, tạo ra gần một triệu yêu cầu http trên cùng một trình xử lý curl. Chúng là những yêu cầu http rất đơn giản đối với một api đơn trên một tên miền duy nhất. Tôi đã không gặp vấn đề gì. – goat
Có thể trùng lặp của [Khi nào sử dụng chức năng cURLs curl \ _đóng?] (Http://stackoverflow.com/questions/3849857/when-to-use-curls-function-curl-close) –