ここでpathinfoに対するfnmatchの速度に関して小さな議論がありました:ファイルがphpであるかどうかをチェックする方法は?
私は完全に確信していなかったので、2つの機能のベンチマークを行うことにしました。
動的パスと静的パスを使用すると、pathinfoの方が高速であることがわかりました。
私のベンチマークロジックと結論は有効ですか?
編集:cmdからmacphpを使用する
PHP 5.3.0(cli)(ビルド:2009年7月20日13:56:33)Copyright(c)1997-2009 PHP Group Zend Engine v2.3.0、Copyright(c)1998-2009 Zend Technologies
動的パスpathinfo3.2973630428314fnmatch 3.4520659446716 x1.05
静的パスpathinfo0.86487698554993fnmatch 1.0420439243317 x1.2
cmdからのmacxamppphp
PHP 5.3.1(cli)(ビルド:2010年2月27日12:41:51)Copyright(c)1997-2009 PHP Group Zend Engine v2.3.0、Copyright(c)1998-2009 Zend Technologies
動的パスpathinfo3.63922715187fnmatch 4.99041700363 x1.37
静的パスpathinfo1.03110480309fnmatch 2.38929820061 x2.32
私のマシンで100,000回の反復を数秒で表した結果のサンプルを含めます。
dynamic path
pathinfo 3.79311800003
fnmatch 5.10071492195
x1.34
static path
pathinfo 1.03921294212
fnmatch 2.37709188461
x2.29
コード:
<pre>
<?php
$iterations=100000;
// Benchmark with dynamic file path
print("dynamic path\n");
$i=$iterations;
$t1=microtime(true);
while($i-->0){
$f='/'.uniqid().'/'.uniqid().'/'.uniqid().'/'.uniqid().'.php';
if(pathinfo($f,PATHINFO_EXTENSION)=='php') $d=uniqid();
}
$t2=microtime(true) - $t1;
print("pathinfo $t2\n");
$i=$iterations;
$t1=microtime(true);
while($i-->0){
$f='/'.uniqid().'/'.uniqid().'/'.uniqid().'/'.uniqid().'.php';
if(fnmatch('*.php',$f)) $d=uniqid();
}
$t3 = microtime(true) - $t1;
print("fnmatch $t3\n");
print('x'.round($t3/$t2,2)."\n\n");
// Benchmark with static file path
print("static path\n");
$f='/'.uniqid().'/'.uniqid().'/'.uniqid().'/'.uniqid().'.php';
$i=$iterations;
$t1=microtime(true);
while($i-->0) if(pathinfo($f,PATHINFO_EXTENSION)=='php') $d=uniqid();
$t2=microtime(true) - $t1;
print("pathinfo $t2\n");
$i=$iterations;
$t1=microtime(true);
while($i-->0) if(fnmatch('*.php',$f)) $d=uniqid();
$t3=microtime(true) - $t1;
print("fnmatch $t3\n");
print('x'.round($t3/$t2,2)."\n\n");
?>
</pre>