Optimiser son code PHP (echo, print ou printf)

© Christian PAULUS. Document créé le 17 mai 2010 , mis à jour le 15 octobre 2011.

Ce qui est simple est toujours faux. Ce qui ne l'est pas est inutilisable. Paul Valéry (Mauvaises pensées)

Accueil du site > Astuces > PHP > Optimiser son code PHP (echo, print ou printf)

Comparatif / PHP 5.3.2

D’aucuns hésitent parfois entre ces trois fonctions qui permettent d’afficher du texte.

Un simple script permet de conclure que - pour un simple affichage, sans reformatage de variables - echo() et print() sont similaires. Et sans surprise, nous découvrons que printf() est trois fois plus lent.

Voici le script employé pour ce test :

<?php

//
// Vérification optimisation code
//

define('LOOP'1000);
$string '.';
// activer la ligne suivante pour texte long
/*
$string = 'Zut ! Je crois que le chien '
    . ' Sambuca préfère le whisky '
    . ' revigorant au doux porto.';
/* */

function def_array(&$r$i$e) {
    if(!isset(
$r[$i])) {
        
$r[$i] = array('min'=>$e'max'=>$e);
    }
    else {
        
$r[$i]['min'] = min($r[$i]['min'], $e);
        
$r[$i]['max'] = max($r[$i]['max'], $e);
    }
    return(
$r);
}

$r = array();

for(
$jj=0$jj<10$jj++) {
    
    
//////////
    
ob_start();
    
$s microtime(1);
    for(
$ii=0$ii<LOOP$ii++) {
        echo(
$string);
    }
    echo(
PHP_EOL );
    
$r def_array($r'echo'microtime(1) - $s);
    
ob_end_clean();
    
    
//////////
    
ob_start();
    
$s microtime(1);
    for(
$ii=0$ii<LOOP$ii++) { 
        echo <<<ECHO0
    $string
ECHO0;
    }
    echo(
PHP_EOL );
    
$r def_array($r'echo0'microtime(1) - $s);
    
ob_end_clean();
    
    
//////////
    
ob_start();
    
$s microtime(1);
    for(
$ii=0$ii<LOOP$ii++) {
        echo <<<"ECHO1"
    $string
ECHO1;
    }
    echo(
PHP_EOL );
    
$r def_array($r'echo1'microtime(1) - $s);
    
ob_end_clean();
    
    
//////////
    
ob_start();
    
$s microtime(1);
    for(
$ii=0$ii<LOOP$ii++) {
        print(
$string);
    }
    echo(
PHP_EOL );
    
$r def_array($r'print'microtime(1) - $s);
    
ob_end_clean();
    
    
//////////
    
ob_start();
    
$s microtime(1);
    for(
$ii=0$ii<LOOP$ii++) {
        
printf($string);
    }
    echo(
PHP_EOL );
    
$r def_array($r'printf'microtime(1) - $s);
    
ob_end_clean();
}

echo(
'resultats:'.PHP_EOL
     
'- echo             : '.$r['echo']['min']."\t".$r['echo']['max'].PHP_EOL 
     
'- echo Heredoc     : '.$r['echo0']['min']."\t".$r['echo0']['max'].PHP_EOL
     
'- echo Heredoc quot: '.$r['echo1']['min']."\t".$r['echo1']['max'].PHP_EOL 
     
'- print            : '.$r['print']['min']."\t".$r['print']['max'].PHP_EOL 
     
'- printf           : '.$r['printf']['min']."\t".$r['printf']['max'].PHP_EOL 
     
);

?>

Si problème de copier/coller, voici ce script compressé :

Zip - 766 octets

Et son résultat pour un texte court :

resultats:
- echo             : 0.00016689300537109        0.00021195411682129
- echo Heredoc     : 0.00027608871459961        0.00034809112548828
- echo Heredoc quot: 0.00027012825012207        0.0022139549255371
- print            : 0.00018191337585449        0.00021505355834961
- printf           : 0.00042009353637695        0.00054311752319336

Et son résultat pour un texte long :

resultats:
- echo             : 0.0002439022064209                0.00034785270690918
- echo Heredoc     : 0.00040602684020996        0.00042486190795898
- echo Heredoc quot: 0.00040292739868164        0.00041699409484863
- print            : 0.00023794174194336        0.00024795532226562
- printf           : 0.0009160041809082                0.0017800331115723

Plussoyez !

Les forums sont fermés.