Bonjour,
Afin de pouvoir comparer les performances d’un code écrit sous Symfony2 avec celles d’un code en PHP simple, mais aussi pour me permettre de calculer les éventuelles lenteurs liées aux différents composants utilisés par le framework (Doctrine et Twig, principalement), j’ai réalisé une série de tests consistant à reproduire la même application sous différents critères et mesurer le temps de génération de la page. Par après, j’ai recommencé ces même tests en activant ou non l’accélérateur APC et la classe ApcClassLoader (qui met en cache l’emplacement de chaque classe une fois qu’elles ont été trouvées la première fois).
L’application est très simple : afficher un article et les commentaires qui lui sont liés. Pour me concentrer uniquement sur les performances côté serveur, je n’ai utilisé aucune image mais uniquement deux fichiers CSS (un reset et un style extrêmement basique).
Tous ces tests ont étés réalisés sur Symfony2.4.2, en environnement de production, sur le même serveur, un serveur virtuel (VPS) OVH, sous la configuration suivante :
> OS : Linux
> Version de PHP : 5.3.3
> Version d’APC : 3.1.9
Les temps de génération des différentes pages sont mesurés avec Firebug 1.12.7, sous l’onglet Analyseur Réseau, depuis Firefox 28, sous un environnement Windows 7.
Pour plus de précision et pour ne pas que les résultats soient faussés par la charge intempestive du serveur, chaque temps correspond à une moyenne de plusieurs rechargements de la même page.
Voici dans les grandes lignes, les différents résultats que j’ai obtenu. Un pdf reprenant plus en détail les temps de chaque test, avec notamment le temps d’initialisation de Symfony, sans cache de production, sera téléchargeable en fin d’article.
Résultats:
Analyse des résultats :
Au vu de ces chiffres, on peut facilement déduire qu’une application Symfony2 prend jusqu’à trois fois le temps de génération de la même application codée ’from scratch’.
On peut voir également que même si les résultats d’APC ne sont pas fulgurants, l’accélérateur réduit légèrement le travail du serveur et donc la génération de la page de quelques dizaines de ms.
Utiliser Doctrine est bien plus lent qu’accéder à une base de données de manière conventionnelle. Son utilisation rallonge inévitablement les temps de chargement puisque l’ORM est implémenté dans les trois pages les plus lentes que j’ai obtenu.
En revanche, Symfony2 semble être optimisé pour travailler avec Twig, car malgré le travail évident que le moteur de template nécessite pour tout reconvertir en PHP, une page affichée par PHP consommera plus de temps.
La gestion du cache par le reverse proxy de Symfony2 réduit légèrement les temps de chargement dans le cas d’une seconde visite sur la même page. Couplé aux en-têtes HTTP ETags et Last-Modified, on peut réduire la génération d’une page au contenu statique de quelques ms supplémentaires. Malheureusement, ce système ne fonctionnera pas de manière optimale sur une page au contenu dynamique.
En conclusion, sans pour autant afficher des performances catastrophiques, un code sous Symfony2 est visiblement bien plus lent qu’un code php classique.
Après une première initialisation du système de cache, les temps de génération sont acceptables au vu de tout ce que le framework doit gérer. De plus, ces temps de chargement peuvent être sensiblement diminués grâce à l’accélérateur PHP APC.
PDF des résultats: http://www.fichier-pdf.fr/2014/04/10/testsymfony2/
Si vous avez des avis où des remarques, si ces chiffres vous semblent bizarres, n'hésitez pas à m'en faire part.
Partager