|
|
|
|
PRATIQUE PHP |
|
|
|
Gérer au mieux la mémoire avec PHP |
|
"Mon serveur atteint assez rapidement ses limites en matière de RAM, existe-t-il des tactiques pour en utiliser le moins possible ?"
(06/01/2006) |
|
|
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Même si le prix du matériel est constamment en baisse, tous
les serveurs Web ne disposent pas de 1 Go de mémoire pour réaliser
toutes les envies de leurs propriétaires - loin de là. Si les
petits scripts du quotidien sollicitent peu la RAM, il en va autrement des traitements plus lourds. L'usage est de surcroît démultiplié par le nombre
de requêtes - et/ou le nombre de clients s'il s'agit d'un serveur
mutualisé.
PHP reste cependant un langage bien conçu et bien optimisé. La plupart des optimisations pourront s'effectuer côté
serveur (configuration Apache par exemple), mais certains aspects
du code peuvent profiter de modifications pour abaisser l'usage
mémoire. Voici quelques idées en la matière.
L'une des
plus courantes est le passage par référence plutôt que par valeur
(lire notre
article du 20/02/04). Les références ne sont évidemment
pas la réponse ultime ni un remplaçant obligatoire aux valeurs
pour qui veut gérer sa mémoire, mais chaque approche a ses qualités. On ne verra par exemple que peu de différence
entre les deux méthodes si les données passées sont d'un
type simple (chaîne, entier, booléens...).
En revanche, les fonctions qui traitent des types plus complexes,
comme des tableaux et/ou des objets,
peuvent gagner à les passer par référence. Il faut cependant
noter que depuis PHP5, les objets sont automatiquement passés
par référence - de fait, la gestion des références a été largement
retravaillée, notamment dans son usage mémoire.
Libérez bien entendu les variables qui ne seront plus utilisées
à l'aide de unset(). Également,
faites en sorte que les cas les plus courants/plausibles d'une
instruction switch() soient
en première position, même s'il s'agit du cas par défaut.
Les aficionados de la récursivité (lire notre
article du 09/05/03) devraient toujours s'assurer que
leur code est utile à tous les stades. Il est en effet facile
de se laisser entraîner, ou d'oublier de remettre à zéro une
valeur inutile, ou encore, tout simplement, d'obtenir une boucle sans fin
sans le savoir - ce qui augmente l'usage mémoire rapidement.
Les fonctions d'inclusion (include_once
et require_once) sont également
à surveiller. Il est préférable de regrouper ses inclusions
en un même endroit plutôt qu'elles s'enchaînent
entre fichiers inclus consécutifs. En effet, chaque fichier
inclus provoque une nouvelle interprétation, principale consommatrice
de mémoire.
Plus généralement, et par extension à ce que nous venons d'écrire,
un excellent moyen de garder son usage mémoire à un niveau bas
est de faire appel à une solution de cache, particulièrement
dans le cas où vos pages changent peu (même toutes les heures).
Les pages cachées ne sont logiquement pas interprétées, et c'est
un soulagement pour le serveur. Un cacheur d'opcode ou
même un simple usage de ob_start()
en début de fichier PHP peuvent se révéler salvateurs. |
|
|
|
|
|