Pourquoi Symfony2 est-il si mauvais dans les benchmarks et est-ce important?

Mes collègues et moi sums en train de choisir un cadre Web pour développer un site Web très fréquenté. Nous sums vraiment bons avec node.js + express et php + symfony2 . Les deux sont d’excellents frameworks, mais nous sums un peu inquiets au sujet de Symfony2, car il semble être plus performant que la plupart des frameworks Web.

Voici les benchmarks qui le prouvent: http://www.techempower.com/benchmarks/

Pour cette raison, nous utiliserons probablement node.js + express, mais je me demande toujours pourquoi Symfony2 fonctionne si mal dans les tests de performances.

En fin de compte, tout se résume à corriger la gestion du cache

Symfony ou PHP en général est plus lent que les autres langages ou frameworks, vous offrant ainsi les outils nécessaires pour créer des applications Web riches, sécurisées et testables très rapidement.

Si vous utilisez un proxy inverse comme Varnish et ESI (inclut les côtés) et finissez par servir les parties de vos modèles, vous devez vraiment les mettre à jour via symfony. vous aurez une expérience extrêmement rapide.

De plus, si vous utilisez un cache d’opcode comme APC et une firebase database optimisée, un utilisateur humain ne remarquera pas réellement la différence de quelques ms dans une application réelle.

Selon la demande, je vais plonger un peu plus loin et vous donner quelques idées supplémentaires.


[ Caching & Performance ]

Avec les services de cloud computing (s3, ec2, gae, …) à peu de frais associés à des répartiteurs de charge, un provisionnement facile (chef, marionnette, …) et tout ce truc funky disponible est devenu facile et abordable même pour petites entresockets pour gérer et gérer des applications de données volumineuses et / ou à trafic élevé.

Plus de stockage signifie plus d’espace pour la mémoire cache – une puissance de calcul accrue signifie une mise en cache plus rapide du cache.

des choses que vous entendrez souvent si les gens parlent de performance PHP ou de framework:

  • facebook fonctionne avec php
  • youp ** n a été développé avec symfony

Alors, pourquoi ces sites ne s’effondrent-ils pas complètement? Parce que leurs routines de mise en cache sont intelligentes.

Saviez-vous par exemple ce que fait Facebook si vous écrivez une mise à jour de statut?

Il ne l’enregistre pas directement dans une table de firebase database avec toutes vos mises à jour de statut et si un ami visite son stream, tous les statuts de tous ses amis sont extraits de la firebase database avant d’être diffusés.

facebook écrit votre statut sur tous les stream de nouvelles de vos amis et commence à chauffer leur cache.

maintenant, tous les stream sont préparés pour servir et chaque fois qu’un de vos amis visite son stream, il recevra une version mise en cache … instantanément sans exécution de code.

le stream affichera seulement votre statut nouvellement créé lorsque le cache warmimg est terminé. nous parlons de ms ici …

Qu’est-ce que cela nous dit? Dans les applications modernes très fréquentées, presque tout est servi depuis le cache et l’utilisateur ne remarquera pas si le calcul de la page a pris 1 ms ou 5 secondes.

Dans un scénario “réel”, l’utilisateur final ne remarquera aucune différence de req / sec entre les frameworks.

Même avec des éléments simples comme la micro-mise en cache, vous pouvez faire en sorte que votre blog hébergé par vps ne soit pas arrêté instantanément une fois que vous l’avez trouvé sur la page de destination de hackernews.

En fin de compte, la chose la plus importante est … mon framework fournit-il les outils, la documentation, les didacticiels et les exemples … pour que tout fonctionne rapidement et facilement. symfony fait pour moi!

Si vous êtes bloqué … combien de personnes sont-elles disposées et capables de répondre à vos questions sur la performance? Combien d’applications réelles ont déjà été ou seront créées dans un avenir proche avec ce framework?

vous choisissez une communauté en choisissant un cadre!

… d’accord c’est la partie importe … maintenant revenir à ces points de repère 🙂


[ Repères et configurations ]

Sur toutes ces couleurs shinyes et ces graphismes sophistiqués dans le benchmark, vous perdez facilement le fait qu’il n’existe qu’une seule configuration (serveur Web, firebase database,…) testée avec chacun de ces frameworks. .

Exemple: au lieu d’utiliser symfony2 + docsortingneORM + mysql, vous pouvez également utiliser symfony + docsortingneODM + MongoDB.

MySQL … MongoDB … Bases de données relationnelles … Bases de données NoSQL … ORM … micro ORM … SQL brut … tout mélangé dans ces configurations ——> pommes et oranges.


[ Repères et optimisation ]

Un problème commun à presque tous les tests de performance – même ceux qui ne comparent que les frameworks php – que l’on trouve sur le Web, ainsi que les “tests de performance du framework Web TechEmpower”, sont une optimisation inégale .

Ces tests n’utilisent pas les optimisations possibles (et bien connues des développeurs expérimentés) sur ces frameworks … du moins pour symfony2 et leurs tests, c’est un fait.

Quelques exemples concernant la configuration de symfony2 utilisée dans leurs derniers tests:

  • “composeur install” n’est pas appelé avec l’indicateur -o pour transférer un chargeur automatique de classmap optimisé ( code )
  • Symfony2 n’utilisera pas le cache APC pour les annotations de métadonnées Docsortingne sans apc_cli = 1 ( problème )
  • le conteneur DI entier est injecté dans le contrôleur au lieu des seuls services nécessaires
  • l’injection setter est utilisée -> crée l’object, puis appelle la méthode setContainer () au lieu d’injecter le conteneur directement dans le constructeur (voir: BenchController extend Controller rayons étend ContainerAware )
  • un alias ($ this-> get (‘nom_service’)) est utilisé pour récupérer les services du conteneur au lieu d’y accéder directement ($ this-> container-> get (‘nom_service’)). ( code )

la liste continue … mais je suppose que vous avez compris où cela mène. 90 questions ouvertes à ce jour… une histoire sans fin.


[ Développement & Ressources ]

Les ressources comme les serveurs et le stockage sont bon marché. Vraiment pas cher … par rapport au temps de développement.

Je suis un pigiste qui applique des tarifs très communs. vous pouvez soit obtenir 2-3 jours de mon temps … ou une charge de ch et de stockage de l’informatique!

Lorsque vous choisissez un framework, vous choisissez également une boîte à outils pour un développement rapide – une arme pour votre combat contre le client jamais complètement satisfait et qui ne craint pas les fonctionnalités … qui vous paiera bien pour ses souhaits.

En tant qu’agence (ou pigiste), vous souhaitez créer des applications riches en fonctionnalités en peu de temps. Vous allez faire face à des points où vous êtes coincé avec quelque chose … peut-être un problème lié à la performance. Mais vous êtes également confronté aux coûts et aux délais de développement.

Qu’est-ce qui sera plus cher? Un serveur supplémentaire ou un développeur supplémentaire?

Ce blog répond à la deuxième partie de votre question: http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage

Rejeter symfony parce que la vitesse d’un test “hello, world” n’est pas aussi bonne qu’avec le framework FooBar est une erreur. La vitesse brute n’est pas le facteur clé pour les professionnels. Le coût est le facteur clé. Et le coût de développement, d’hébergement et de maintenance d’une application avec symfony est inférieur à celui des autres solutions.

Lors du choix d’un cadre, il faut tenir compte des coûts totaux de développement. Cela signifie qu’il faut examiner la qualité du code du framework (tests unitaires, documentation, etc.), les performances (et les coûts d’hébergement), la quantité et la qualité des fonctionnalités prêtes à l’emploi, la taille de la communauté, l’utilisation par les organisations. comme le vôtre, évolutivité, etc.

En tant que développeur Symfony, je déteste passionnément WordPress d’un sharepoint vue technique. Mais je vais quand même recommander (et même l’utiliser!) Pour un simple site web. Pas seulement parce que c’est populaire, mais aussi parce que la taille de sa communauté: il est très facile d’embaucher un concepteur / développeur WordPress. Regarder une comparaison de performance entre WordPress et Symfony n’aurait aucun sens dans ce cas.