Voici un post destiné à orienter les webmestres peu portés sur l'admin à améliorer les performances de leur site web.
Etant donné que je bosse sur un dédié avec Apache, PHP et MySQL, une partie de ces optimisations ne concernent que les personnes dans le même cas. C'est quand même très très courant ;-)
On est dans la partie administration, pas développement, j'omettrais donc volontairement ce qui concerne l'algorithmie, l'utilisation des CSS, la compression des images etc.
Base de données
Types des champs
Choisissez toujours le type le plus petit possible pour stocker vos données
Utilisation des indexs
N'oubliez pas de placer des indexs sur vos champs sur lesquels vous faites vos SELECT. C'est très simple à effectuer (vous pouvez le faire via PHPMyAdmin) et ça accélère vraiment BEAUCOUP les recherches en base.
MySQL 3.23
... est vraiment obsolète et surtout, n'inclus pas de cache. Passez aux versions supérieures pour bénéficier d'un système de cache, toujours appréciable.
Le meilleur mode est le mode manuel en précisant dans les requêtes si elles doivent être mises en cache ou non. Ca peut être un peu longuet, si ça vous parait être trop long, laissez-le en automatique.
Tables HEAP ou MEMORY
Ce sont des tables dont le contenu est "volatile". En cas de reboot, tous ses enregistrements seront perdus.
En revanche, ce type de table est très rapide puisque les données sont stockées en mémoire. Et puisqu'elles sont stockées en mémoire, il faut éviter d'utiliser ce type pour les grandes tables, à moins d'avoir beaucoup de RAM
Optimisation PHP
Cache d'opcode
Un cache d'opcode évite que PHP parse votre code à chaque appel de la page. De plus, le code compilé reste en RAM ce qui accélère encore grandement l'éxécution.
Le taux de réussite de ce genre de cache est très élevé (99%, par là), on voit donc tout son intérêt.
Je vous conseille APC, qui fait partie de PECL : http://pecl.php.net/package/APC
Cache d'objets
Vous pouvez utiliser un cache d'objets afin d'optimiser la consommation mémoire et éviter des requêtes SQL. Ce type d'optimisation est assez complexe, je vous laisse creuser par vous-même : http://www.danga.com/memcached/
Diminuez la consommation de bande passante
Utilisez la compression à la volée du code HTML. Cela consomme un peu plus de CPU mais cela a un impact direct sur la perception du temps de réponse des visiteurs.
Vous pouvez activer cette fonctionnalité au niveau du serveur Apache grace à mod_deflate (http://httpd.apache.org/docs/2.0/mod/mod_deflate.html), ou en activant la compression coté PHP (output_handler =ob_gzhandler dans PHP.ini)
Config d'Apache
Si comme moi vous n'en voyez pas l'intérêt, je vous conseille de ne pas logger tous les appels serveurs. Personnelement, le ne logge pas les appels aux images et feuilles de styles, ça évite d'avoir des fichiers énormes et limite les accès disques.
Evitez également l'activation des htaccess placés dans les répertoires et placez tout dans le fichier de conf de votre site, afin d'éviter beaucoup d'accès disque inutiles.
Cache de pages
Sans doute le plus radicale, il s'agit de sauvegarder les pages générées en HTML et de ne pas recalculer toute la page. Il faut savoir un minimum ce que l'on fait pour ne pas saturer le disque, et bien comprendre le processus d'élaboration des pages pour, par exemple, ne pas afficher une page périmée alors que son contenu a changé. Il est aussi possible de définir une durée de vie de la page, ce qui peut être suffisant si le contenu ne vient pas des visiteurs. Dans le cas contraire (commentaires...), vos visiteurs risquent de ne pas comprendre et de poster plusieurs fois.
Je vous conseille Cache_Lite, qui fait aussi partie de PEAR.
Un tuto ici : http://developpeur.journaldunet.com/tut ... he1a.shtml
Voilà, c'est tout pour aujourd'hui. Suivant la manière dont est organisé et codé votre site, et les optimisations que vous avez déjà mis en place, les gains varieront. Mais si pour le moment, vous ne vous êtes jamais penché sur l'optimisation, vous pourrez être surpris par les résultats...
Etant donné que je bosse sur un dédié avec Apache, PHP et MySQL, une partie de ces optimisations ne concernent que les personnes dans le même cas. C'est quand même très très courant ;-)
On est dans la partie administration, pas développement, j'omettrais donc volontairement ce qui concerne l'algorithmie, l'utilisation des CSS, la compression des images etc.
Base de données
Types des champs
Choisissez toujours le type le plus petit possible pour stocker vos données
Utilisation des indexs
N'oubliez pas de placer des indexs sur vos champs sur lesquels vous faites vos SELECT. C'est très simple à effectuer (vous pouvez le faire via PHPMyAdmin) et ça accélère vraiment BEAUCOUP les recherches en base.
MySQL 3.23
... est vraiment obsolète et surtout, n'inclus pas de cache. Passez aux versions supérieures pour bénéficier d'un système de cache, toujours appréciable.
Le meilleur mode est le mode manuel en précisant dans les requêtes si elles doivent être mises en cache ou non. Ca peut être un peu longuet, si ça vous parait être trop long, laissez-le en automatique.
Tables HEAP ou MEMORY
Ce sont des tables dont le contenu est "volatile". En cas de reboot, tous ses enregistrements seront perdus.
En revanche, ce type de table est très rapide puisque les données sont stockées en mémoire. Et puisqu'elles sont stockées en mémoire, il faut éviter d'utiliser ce type pour les grandes tables, à moins d'avoir beaucoup de RAM
Optimisation PHP
Cache d'opcode
Un cache d'opcode évite que PHP parse votre code à chaque appel de la page. De plus, le code compilé reste en RAM ce qui accélère encore grandement l'éxécution.
Le taux de réussite de ce genre de cache est très élevé (99%, par là), on voit donc tout son intérêt.
Je vous conseille APC, qui fait partie de PECL : http://pecl.php.net/package/APC
Cache d'objets
Vous pouvez utiliser un cache d'objets afin d'optimiser la consommation mémoire et éviter des requêtes SQL. Ce type d'optimisation est assez complexe, je vous laisse creuser par vous-même : http://www.danga.com/memcached/
Diminuez la consommation de bande passante
Utilisez la compression à la volée du code HTML. Cela consomme un peu plus de CPU mais cela a un impact direct sur la perception du temps de réponse des visiteurs.
Vous pouvez activer cette fonctionnalité au niveau du serveur Apache grace à mod_deflate (http://httpd.apache.org/docs/2.0/mod/mod_deflate.html), ou en activant la compression coté PHP (output_handler =ob_gzhandler dans PHP.ini)
Config d'Apache
Si comme moi vous n'en voyez pas l'intérêt, je vous conseille de ne pas logger tous les appels serveurs. Personnelement, le ne logge pas les appels aux images et feuilles de styles, ça évite d'avoir des fichiers énormes et limite les accès disques.
Evitez également l'activation des htaccess placés dans les répertoires et placez tout dans le fichier de conf de votre site, afin d'éviter beaucoup d'accès disque inutiles.
Cache de pages
Sans doute le plus radicale, il s'agit de sauvegarder les pages générées en HTML et de ne pas recalculer toute la page. Il faut savoir un minimum ce que l'on fait pour ne pas saturer le disque, et bien comprendre le processus d'élaboration des pages pour, par exemple, ne pas afficher une page périmée alors que son contenu a changé. Il est aussi possible de définir une durée de vie de la page, ce qui peut être suffisant si le contenu ne vient pas des visiteurs. Dans le cas contraire (commentaires...), vos visiteurs risquent de ne pas comprendre et de poster plusieurs fois.
Je vous conseille Cache_Lite, qui fait aussi partie de PEAR.
Un tuto ici : http://developpeur.journaldunet.com/tut ... he1a.shtml
Voilà, c'est tout pour aujourd'hui. Suivant la manière dont est organisé et codé votre site, et les optimisations que vous avez déjà mis en place, les gains varieront. Mais si pour le moment, vous ne vous êtes jamais penché sur l'optimisation, vous pourrez être surpris par les résultats...