एक ही हैंडल का पुन: उपयोग करने के लिए प्रदर्शन में वृद्धि हुई है। देखें: Reusing the same curl handle. Big performance increase?
आप अनुरोधों की जरूरत नहीं है तुल्यकालिक होने के लिए, curl_multi_ का उपयोग कर * कार्यों पर विचार (जैसे curl_multi_init, curl_multi_exec, आदि) जो भी एक बड़ा प्रदर्शन को बढ़ावा देने प्रदान करते हैं।
अद्यतन:
मैं प्रत्येक अनुरोध के लिए एक नया हैंडल का उपयोग करता है और निम्नलिखित कोड के साथ एक ही हैंडल का उपयोग के साथ कर्ल benching की कोशिश की:
Curl without handle reuse: 8.5690529346466
Curl with handle reuse: 5.3703031539917
:
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>';
और निम्न परिणाम मिला
तो उसी सर्वर से कनेक्ट होने पर एक ही हैंडल का पुन: उपयोग करना वास्तव में एक महत्वपूर्ण प्रदर्शन वृद्धि प्रदान करता है। मैं अलग सर्वर से कनेक्ट करने की कोशिश की:
$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 अनुरोध हैं। मुझे कोई समस्या नहीं मिली है। – goat
संभावित डुप्लिकेट [जब curls फ़ंक्शन कर्ल \ _close का उपयोग कब करें?] (Http://stackoverflow.com/questions/3849857/when-to-use-curls-function-curl-close) –