Quelques conventions : Zend Framework coding standards.
L'impression (performance) :
La boucle for (performance) :
Parcourir le nième niveau d'un tableau (performance) :
Comparaison des n premiers caractères d'une chaine (performance) :
S'assurer qu'une chaîne n'est pas vide (piège) :
S'assurer qu'une chaîne ne dépasse pas 32 caractères (performance) :
L'opérateur ternaire (performance) :
Inclure un fichier (performance) :
Quelques petits trucs :
D'autres petits trucs que j'approfondirai si vous le souhaitez :
En espérant que ceci soit utile.
L'impression (performance) :
- les doubles guillemets imposent à php de parser toute la chaîne,
- la concaténation à un coût.
-
Code:
Mal : <?php echo "Je me prénomme $firstname."; ?> Bien : <?php echo 'Je me prénomme ' . $firstname . '.'; ?> Mieux : <?php echo 'Je me prénomme ', $firstname, '.'; ?>
La boucle for (performance) :
- le mal recalculera le nombre d'éléments du tableau à chaque itération,
- le bien calculera ce nombre avant,
- le mieux n'étendra pas le nombre d'appels à effectuer.
-
Code:
Mal : <?php for($i = 0; $i < count ( $array ); $i ++) { $array [$i] = 'Enregistrement n°'.$i; } ?> Bien : <?php $count = count ( $array ); for($i = 0; $i < $count; $i ++) { $array [$i] = 'Enregistrement n°'.$i; } ?> Mieux : <?php for($i = 0, $count = count ( $array ); $i < $count; $array [$i ++] = 'Enregistrement n°'.$i); ?>
Parcourir le nième niveau d'un tableau (performance) :
- Le mal devra parcourir chaque niveau du tableau avant d'imprimer,
- le bien exploitera une référence directe à ce niveau.
-
Code:
Mal : <?php for($i = 0, $count = count ( $array ['key'] ['key'] ['key'] ['key'] ); $i < $count; $i ++) { echo $array ['key'] ['key'] ['key'] ['key'] [$i]; } ?> Bien : <?php $ref &= $array ['key'] ['key'] ['key'] ['key']; for($i = 0, $count = count ( $ref ); $i < $count; $i ++) { echo $ref [$i]; } ?>
Comparaison des n premiers caractères d'une chaine (performance) :
-
Code:
Mal : <?php if (substr ( 'Coucou' , 0 , 3 ) === 'Cou') /* Pompompom */ ?> Bien : <?php if (! strncmp ( 'Coucou' , 'Cou' , 3 )) /* Pompompom */ ?>
S'assurer qu'une chaîne n'est pas vide (piège) :
- Le mal répondra vrai si la chaîne est '' ou 0, ou encore false (ce qui est en fait parfaitement logique),
- le mieux vérifiera qu'un premier char est défini.
-
Code:
Mal : <?php if (isset ($string)) /* pompompom */ ?> Bien : <?php if (isset ($string) && (! empty ($string))) /* pompompom */ ?> Mieux : <?php if (isset ($string{0})) /* pompompom */ ?>
S'assurer qu'une chaîne ne dépasse pas 32 caractères (performance) :
- Le mieux vérifiera la présence d'un 33ème char.
-
Code:
Bien : <?php if (strlen ($string) < 33) /* pompompom */ ?> Mieux : <?php if (! isset ($string{32})) /* pompompom */ ?>
L'opérateur ternaire (performance) :
- Cet opérateur est illisible, limitez-vous donc à des conditions simples d'un niveau.
-
Code:
Bien : <?php if (true === true) { echo 'Vrai'; } else { echo 'Faux'; } ?> Un peu mieux : <?php echo true === true ? 'Vrai' : 'Faux'; ?>
Inclure un fichier (performance) :
- Définissez des chemins absolus,
- évitez les fonctions _once.
-
Code:
Mal : <?php require_once ('/pompompom/'.$class.'.php'); ?> Bien : <?php if (! class_exists ($class)) require ('/pompompom/'.$class.'.php'); ?>
Quelques petits trucs :
- Evitez l'opérateur de suppression d'erreur @,
- regex : utilisez ?: afin d'éviter la capture de parenthèses inutiles ou définissez des classes,
- utilisez des constantes de class plutôt que globales,
- utilisez le bitwise,
- utilisez un profiler (zend, apd, xdebug).
D'autres petits trucs que j'approfondirai si vous le souhaitez :
- Utilisez un cache d'opcode,
- forcez le type de certains arguments (nécessite de modifier les sources),
- définissez un entrepôt de données unique mais multisources (stock, bdd, xml, mémoire),
- stockez les variables persistantes en mémoire,
- stockez les sessions sur bdd ou en mémoire,
- gzipez le contenu,
- limitez vos paquets à 4ko,
- définissez la période de mise en cache côté client,
- définissez une texture plutôt que 10 images différentes,
- vérifiez qu'une modification peut se faire avant de la tenter,
- quittez Apache. =]
En espérant que ceci soit utile.