Ostatnio przeniosłem swój skrobiący kod z Curl do CodeIgniter. Używam biblioteki Curl CI od http://philsturgeon.co.uk/code/codeigniter-curl. Wrzucam proces skrobania do kontrolera, a następnie stwierdziłem, że czas wykonywania mojego skrobania jest wolniejszy niż ten, który zbudowałem w zwykłym PHP.Dlaczego biblioteka Curl CodeIgniter jest wolniejsza niż użycie Curl w zwykłym PHP?
Zajęło 12 sekund, aby CodeIgniter wyprowadził wynik, podczas gdy w zwykłym PHP zajmuje to tylko 6 sekund. Oba obejmują proces analizowania z analizatorem DOM HTML.
Oto mój Curl kod w CodeIgniter:
function curl($url, $postdata=false)
{
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
$this->curl->create($url);
$this->curl->ssl(false);
$options = array(
'URL' => $url,
'HEADER' => 0,
'AUTOREFERER' => true,
'FOLLOWLOCATION' => true,
'TIMEOUT' => 60,
'RETURNTRANSFER' => 1,
'USERAGENT' => $agent,
'COOKIEJAR' => dirname(__FILE__) . "/cookie.txt",
'COOKIEFILE' => dirname(__FILE__) . "/cookie.txt",
);
if($postdata)
{
$this->curl->post($postdata, $options);
}
else
{
$this->curl->options($options);
}
return $this->curl->execute();
}
non CodeIgniter (zwykły php) Kod:
funkcja curl ($ url, $ binarny = false $ post = false $ Cookie = false) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
if($cookie){
$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookie.txt");
}
if($binary)
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
if($post){
foreach($post as $key=>$value)
{
$post_array_string1 .= $key.'='.$value.'&';
}
$post_array_string1 = rtrim($post_array_string1,'&');
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array_string1);
}
return curl_exec ($ch);
}
Czy ktoś wie dlaczego to CodeIgniter Curl jest wolniejszy ?? a może to dlatego, że parser simple_html_dom?
Czy możesz przesłać swój nieszyfrowy kod, aby przetestować go samodzielnie? – Brendan
Czy testujesz na lokalnym komputerze? Czy wysyłasz te same dane o tym samym rozmiarze przez zwijanie i zwinięcie kodu? Czy testujesz przy 100 połączeniach? – Sergey
Tak, przetestowałem na localhost xampp z tymi samymi danymi i rozmiarem, co oznacza test przez 100 połączeń? –