course de chevaux

Best Practice : remplacer le strlen par des isset

Comment devenir plus rapide que le strlen

if strlen php

Date de publication : 2009-03-26 15:45:53

Une micro optimisation dans un cas bien particulier de l'utilisation de la fonction strlen consiste à remplacer strlen par des isset.

L'optimisation présentée dans cet article s'applique lorsque l'on effectue un test sur une longueur de chaine.

Code avec strlen

Voici le code écrit par le développeur php lambda :


<?php
if(strlen($string) === 3)
{
echo 'ok';
}
else
{
echo 'ko';
}
?>

Code équivalent avec les isset

Maintenant un code écrit par un développeur php avancé ou un codeur C reconverti :


<?php
if(isset($string[2]) === true && isset($string[3]) === false)
{
echo 'ok';
}
else
{
echo 'ko';
}
?>

Fonction basée sur l'optimisation avec isset

Maintenant le développeur php lambda veut utiliser la puissance de cette optimisation dans sa fonction perso et il écrit la fonction suivante :


<?php
function strlencompare($string,$length)
{
return isset($string[$length - 1]) === true && isset($string[$length]) === false;
}
?>

Benchmark des trois solutions proposées

Maintenant voici le code du benchmark pour évaluer la rapidité des différentes solutions :


<?php
$start = microtime(true);
for($i=1;$i<10000;$i++)
{
$bool = isset($string[2]) === true && isset($string[3]) === false;
}
var_dump(microtime(true) - $start);
$start = microtime(true);
for($i=1;$i<10000;$i++)
{
$bool = strlen($string) === 3;
}
var_dump(microtime(true) - $start);
$start = microtime(true);
for($i=1;$i<10000;$i++)
{
$bool = strlencompare($string,3);
}
var_dump(microtime(true) - $start);
?>

Résultats du benchmark


isset : 0.011899948120117
strlen : 0.029593944549561
strlencompare : 0.04882502555847

Conclusion

En interprétant ces résultats on voit bien que l'optimisation présentée apporte un réel gain de performance (300 % environ) par rapport à l'utilisation de strlen au détriment de la lisibilité du code.

En écrivant une fonction basée sur la micro optimisation par isset, le développeur lambda c'est tiré une balle dans le pied car il a perdu sur les deux tableaux : performances moindre et lisibilité réduite.

Image : buildscharacter

 
 

b1n@sp1n