Optimisation de sites php mysql

Optimisation de site php mysql

D'une manière générale, le php est rapide a exécuter, mais les connexions entre les hôtes est lente.  0,1 s pour tout le script php par rapport à 0.2s par connexion avec mysql.

 

Mysql

  • mettre les valeurs à NOT NULL si on sait qu'elle vont l'être.. pas besoin de lire le bit pour savoir avant d'aller piocher la valeur.
  • utiliser char à la place de varchar. Char est moins gourmand en CPU car il n'a pas besoin de calculer la taille du champ pour aller au suivant. On fait donc le choix que le coût CPU est plus important que le coût mémoire. Car avec varchar on économise un petit peu de mémoire. Si un champ d'une table est variable, toute la table l'est !!  Un champ text est un champ variable !
  • mettre des index sur les champs utilisés fréquemment pour des recherches. C'est très bien en lecture, mais éviter de mettre des index sur des champs qui doivent être écrit souvent. C'est très lent.
  • éviter select * être plus précis.
  • utiliser limit 1 si l'on est certain d'avoir besoin que d'un enregistrement. Ainsi Mysql stop la recherche et ne va pas tenter de trier les données.. Genre le break.
  • utiliser des nombres plutôt que des string pour faire les jointures !  Comparer des nombres en en gros 2 fois plus rapide que de comparer une chaîne de 3 caractères !  après c'est encore pire.

PHP

  • éviter la fonction in_array() remplacer par un isset() sur les clés d'un tableau. Pour mettre les valeurs d'un tableau dans des clés utiliser array_ fill_ keys. Les clés d'un tableau sont des tables de hachage donc très rapide.
  • ne pas utiliser require_once();  require() ou include() sont beaucoup plus rapide.
  • utiliser la pré-incrémentation plutôt que la post incrémentation. ++$i est 10% plus rapide que $i++. Zend optimizer le fait pour nous!
  • utiliser les multiples paramètre de echo pour faire des concaténations. echo "toto", Mafonction(),"bleu", getTotot()  est mieux que d'utiliser l'opérateur de concaténation . qui va lui générer plein d'objet temporaire.
  • mettre en cache les variables dans un tableau. Sur une boucle de 10millions d'itérations on gagne 15% de temps CPU. $tableau['variable'] oblige php à rechercher la valeur dans le tableau et cette recherche bouffe du temps. Mais c'est tout de même peu.
  • compression ob_gzhandler ... gain de 33% de donnée à transferrer.

 

Mythe php

  • écrire  'toto' ou "toto" ne change pas grand chose en performance c'est de l'ordre de 0,01% Donc négligeable !

 

Apache

  • ne pas utiliser mod access.. donc pas de htaccess.. car il va chercher dans tous le dossier jusqu'au parent qui contient un htaccess. (ou limiter le nombre de niveau de hiérarchie)

Maintenance.

  • OPTIMIZE TABLE table   défragmenter de temps en temps les tables.

à creuser..

  • select in est très rapide ?
  • table temporaire plutôt que script php

Référence

Remonter