Il y avait un petit débat sur la vitesse de fnmatch sur pathinfo ici: how to check if file is php?pathinfo vs fnmatch
je ne suis pas totalement convaincu donc décidé de comparer les deux fonctions. L'utilisation de chemins dynamiques et statiques a montré que pathinfo était plus rapide.
Ma logique de benchmarking et ma conclusion sont-elles valables?
EDIT: Utilisation de mac php de cmd
PHP 5.3.0 (cli) (construction: 20 juillet 2009 13:56:33) Copyright (c) 1997-2009 Le groupe PHP Zend Engine v2.3.0 Copyright (c) 1998-2009 Zend Technologies
chemin dynamique pathinfo 3,2973630428314 fnmatch 3,4520659446716 x1.05
chemin statique pathinfo ,86487698554993 fnmatch 1,0420439243317 x1.2
mac xampp php de cmd
PHP 5.3.1 (cli) (construite: 27 février 2010 12:41:51) Copyright (c) 1997- 2009 Le moteur PHP Group Zend v2.3.0 Copyright (c) 1998-2009 Zend Technologies
chemin dynamique pathinfo 3,63922715187 fnmatch 4,99041700363 x1.37
chemin statique pathinfo 1.03110480309 fnmatch 2.38929820061 x2.32
I comprennent un échantillon des résultats qui sont en quelques secondes pour 100.000 itérations sur ma machine:
dynamic path
pathinfo 3.79311800003
fnmatch 5.10071492195
x1.34
static path
pathinfo 1.03921294212
fnmatch 2.37709188461
x2.29
code:
<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>
devrait être une CW puisque ce n'est pas une vraie question, je suppose – Gordon
Il est une vraie question! Pourquoi les autres arrivent-ils à une conclusion différente? – zaf
Combien de fois avez-vous exécuté le test? Sur les machines multitâches, certaines tâches peuvent être retardées, ce qui ralentit les portions de code qui peuvent normalement être plus rapides. – webbiedave