パフォーマンスの観点からは問題ありません。スクリプトの残りの部分で必要な機能を補完する方法を選択してください。curl_init() を実行するのに必要な時間は、HTTP 要求を行うのにかかる時間に比べればほんのわずかです。
これらの小さなスクリプトの両方をテストしました。最初の実行時間は 3,293.014 ミリ秒で、2 番目の実行時間は 3,176.957 ミリ秒でした。2 番目のスクリプトは最初のスクリプトよりも多くの命令を繰り返すため、これは少し直感に反するように見えます。しかし、これら 2 つの時間差を見ると、1 リクエストあたり約 6 ミリ秒であり、20 の HTTP リクエストを作成するプロセス全体に 6 秒かかる場合、おそらく「丸め誤差」の範囲内になります。
自分でテストしたい場合は、以下のコードを利用できます。
<?php // RAY_class_Stopwatch.php
error_reporting(E_ALL);
// DEMONSTRATE A SCRIPT TIMER FOR ALL OR PART OF A SCRIPT PHP 5+
// MAN PAGE http://php.net/manual/en/function.microtime.php
class StopWatch
{
protected $a; // START TIME
protected $s; // STATUS - IF RUNNING
protected $z; // STOP TIME
public function __construct()
{
$this->a = array();
$this->s = array();
$this->z = array();
}
public function __destruct()
{
$ret = $this->readout();
if (!$ret) return FALSE;
echo
__CLASS__
. '::'
. __FUNCTION__
. '() '
;
echo "<b>$ret</b>";
echo PHP_EOL;
}
// A METHOD TO REMOVE A TIMER
public function reset($name='TIMER')
{
// RESET ALL TIMERS
if ($name == 'TIMER')
{
$this->__construct();
}
else
{
unset($this->a[$name]);
unset($this->s[$name]);
unset($this->z[$name]);
}
}
// A METHOD TO CAPTURE THE START TIME
public function start($name='TIMER')
{
$this->a[$name] = microtime(TRUE);
$this->z[$name] = $this->a[$name];
$this->s[$name] = 'RUNNING';
}
// A METHOD TO CAPTURE THE END TIME
public function stop($name='TIMER')
{
$ret = NULL;
// STOP ALL THE TIMERS
if ($name == 'TIMER')
{
foreach ($this->a as $name => $start_time)
{
// IF THIS TIMER IS STILL RUNNING, STOP IT
if ($this->s[$name])
{
$this->s[$name] = FALSE;
$this->z[$name] = microtime(TRUE);
}
}
}
// STOP ONLY ONE OF THE TIMERS
else
{
if ($this->s[$name])
{
$this->s[$name] = FALSE;
$this->z[$name] = microtime(TRUE);
}
else
{
$ret .= "ERROR: CALL TO STOP() METHOD FOR '$name' IS NOT RUNNING";
}
}
// RETURN AN ERROR MESSAGE, IF ANY
return $ret;
}
// A METHOD TO READ OUT THE TIMER(S)
public function readout($name='TIMER', $dec=3, $m=1000, $eol=PHP_EOL)
{
$str = NULL;
// GET READOUTS FOR ALL THE TIMERS
if ($name == 'TIMER')
{
foreach ($this->a as $name => $start_time)
{
$str .= $name;
// IF THIS TIMER IS STILL RUNNING UPDATE THE END TIME
if ($this->s[$name])
{
$this->z[$name] = microtime(TRUE);
$str .= " RUNNING ";
}
else
{
$str .= " STOPPED ";
}
// RETURN A DISPLAY STRING
$lapse_time = $this->z[$name] - $start_time;
$lapse_msec = $lapse_time * $m;
$lapse_echo = number_format($lapse_msec, $dec);
$str .= " $lapse_echo";
$str .= $eol;
}
return $str;
}
// GET A READOUT FOR ONLY ONE TIMER
else
{
$str .= $name;
// IF THIS TIME IS STILL RUNNING, UPDATE THE END TIME
if ($this->s[$name])
{
$this->z[$name] = microtime(TRUE);
$str .= " RUNNING ";
}
else
{
$str .= " STOPPED ";
}
// RETURN A DISPLAY STRING
$lapse_time = $this->z[$name] - $this->a[$name];
$lapse_msec = $lapse_time * $m;
$lapse_echo = number_format($lapse_msec, $dec);
$str .= " $lapse_echo";
$str .= $eol;
return $str;
}
}
}
// DEMONSTRATE THE USE -- INSTANTIATE THE STOPWATCH OBJECT
$sw = new Stopwatch;
// TIME OSA'S SCRIPTS
ob_start();
$sw->start('ENTIRE');
$sw->start('FIRST');
$ch = curl_init();
for($i=0; $i<10; $i++){
// curl options skiped ..
curl_setopt($ch,CURLOPT_URL,"https://secure.imvu.com/login/login/");
$response = curl_exec($ch);
// print $response;
}
curl_close($ch);
$sw->stop('FIRST');
$sw->start('SECOND');
for($i=0; $i<10; $i++){
$ch = curl_init();
// curl options skiped ..
curl_setopt($ch,CURLOPT_URL,"https://secure.imvu.com/login/login/");
$response = curl_exec($ch);
// print $response;
curl_close($ch);
}
$sw->stop('SECOND');
$sw->stop('ENTIRE');
ob_end_clean();
$sw->readout();
よろしくお願いします、〜レイ