最近、私はCurlでスクレイピングコードをCodeIgniterに移しました。私はhttp://philsturgeon.co.uk/code/codeigniter-curlからCurl CIライブラリを使用しています。私は掻爬プロセスをコントローラに入れて、私の掻き取りの実行時間が普通のPHPで構築したものよりも遅いことを発見しました。なぜCodeIgniterのCurlライブラリは、普通のPHPでCurlを使用するよりも時間がかかりますか?
CodeIgniterが結果を出力するのに12秒かかりましたが、普通のPHPでは6秒しかかかりませんでした。どちらも、HTML DOMパーサーによる解析プロセスを含んでいます。
はここで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();
}
非CodeIgniterの(プレーンなPHP)コード:偽
関数カール($のURL、$バイナリ= falseの場合、$ポスト= 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);
}
このCodeIgniterのカールが遅い理由を誰もが知っています?それともsimple_html_domパーサーですか?
codeigniter以外のコードを投稿して、自分でテストすることはできますか? – Brendan
ローカルマシンでテストしますか?同じサイズの同じデータをカールとコードネームのカールで送信しますか?あなたは100の接続でテストしますか? – Sergey
はい同じデータとサイズのlocalhost xamppでテストしましたが、100接続でのテストはどういう意味ですか? –