©
. Document créé le 15 octobre 2011 , mis à jour le 15 octobre 2011.En cas de morsure de vipère, sucez-vous le genou, ça fait marrer les écureuils. Pierre Desproges
Accueil du site > Astuces > PHP > echo() PHP, avec ou sans temporisation
Toujours à la recherche de l’optimisation de code PHP, est présentée ici une (légère) étude sur l’emploi de la fonction echo() [1]
Autant le préciser, test réalisé sur Mac-mini :
10.8.0 Darwin Kernel Version 10.8.0 : Tue Jun 7 16:33:36 PDT 2011 ; root:xnu-1504.15.3 1/RELEASE_I386 i386 Apache 2.0 Handler PHP 5.3.5
Ne compte que le temps passé à la construction de la page. Pas celui de la transmisson - du réseau. Donc très proche du temps réel, sans prendre en compte les processus parallèles. Le must serait de faire passer le serveur en mode dédié apache/php. Désolé, problème de temps. Si vous en avez, ou si vous avez le courage, les commentaires en bas de page vous ouvrent les bras.
Le code PHP pour tester echo() sans et avec temporisation :
<?php
define ('NBBOUCLE', 1000);
// 256 lignes de 80 caractères
$chaine = str_repeat ( str_repeat ( '.', 80) . PHP_EOL , 256 );
/**
* Inutile d'afficher le test lui-même
*/
echo ('<div style="display:none;">'.PHP_EOL);
// salve d'éveil
// (histoire de réveiller php, ou apache, ou...)
for ($ii=0; $ii<NBBOUCLE; $ii++)
{
echo ($chaine);
}
// première *vraie* salve
$start = microtime(1);
for ($ii=0; $ii<NBBOUCLE; $ii++)
{
echo ($chaine);
}
$time_multi = microtime(1) - $start;
// idem, avec buffer
$start = microtime(1);
$buff = '';
for ($ii=0; $ii<NBBOUCLE; $ii++)
{
$buff.=$chaine;
}
echo ($buff);
$time_buffr = microtime(1) - $start;
// idem, en temporisant
$start = microtime(1);
ob_start();
for ($ii=0; $ii<NBBOUCLE; $ii++)
{
echo ($chaine);
}
echo(ob_get_contents());
ob_end_clean();
$time_tempo = microtime(1) - $start;
echo (PHP_EOL);
echo ('</div>'.PHP_EOL);
echo '<br />'.PHP_EOL;
echo '<pre>'.PHP_EOL;
echo 'multi echo: '.$time_multi.' ms'.PHP_EOL;
echo 'uniqu echo: '.$time_buffr.' ms'.PHP_EOL;
echo 'temporisat: '.$time_tempo.' ms'.PHP_EOL;
echo '</pre>'.PHP_EOL;
?>
Et le résultat de 4 chargements successifs de la page :
multi echo : 0.871028900146 ms uniqu echo : 0.814095020294 ms temporisat : 0.230682134628 ms
multi echo : 1.25754284859 ms uniqu echo : 1.11795186996 ms temporisat : 0.351218938828 ms
multi echo : 1.29363012314 ms uniqu echo : 1.02837705612 ms temporisat : 0.216356039047 ms
multi echo : 0.881450891495 ms uniqu echo : 1.02975702286 ms temporisat : 0.309266090393 ms
Visiblement, il y a - au final - peu d’écarts entre l’appel d’un seul ou plusieurs echo(). Le choix sera donc ici esthétique, ou pour la lisibilité du code, ou la taille finale du script php.
Par contre, temporiser à l’aide de ob_start() et ob_get_contents() est tout simplement surprenant, séduisant. Dans le cadre de ce test, on y gagne 60 %.
Mérite en tout cas que l’on s’y intéresse.
[1] Dans la série Optimisation de code PHP, vous pouvez consulter le billet Optimiser son code PHP (echo, print ou printf)
Les forums sont fermés.