Article co-écrit avec Grégory Quatannens

Cette année, le Symfony Live s’est tenu les 3 et 4 mars à la Cité Universitaire à Paris. Il s’agit de l’évènement officiel de la communauté des développeurs Symfony organisée par Sensio Labs.

Programme / Description de l’ambiance

Au menu, 31 présentations, 29 conférenciers, 500 participants, 1 600 slides et 10 000 litres de café…

La majorité de ces présentations portait sur la nouvelle version du framework : Symfony2. D’autres sujets plus généralistes étaient abordés notamment Git, le cache HTTP ou encore l’optimisation des performances d’applications web.

Pour cette session, les organisateurs avaient également prévu une « unconference ». Le principe : des présentations courtes, informelles et proposées par des participants. Les thèmes abordés restent les mêmes et tournent autour du développement d’applications web avec PHP/Symfony. L’appel à candidature s’est fait le premier jour et les présentations ont eu lieu le lendemain dans une 3ème salle.

Sujets incontournables

Les performances

« Si vous n’avez pas optimisé votre frontend, vous n’avez pas optimisé votre application. »

L’optimisation de nos applis web devrait toujours être la priorité. Pierre Spring a résumé dans sa présentation les recettes les plus importantes à appliquer afin d’optimiser votre frontend. L’avantage c’est que la plupart de ces bonnes pratiques s’appliquent à n’importe quelle application/site web. Nos préférées :

  • La minification (supprimer les caractères inutiles des fichiers : espaces, commentaires,…  afin d’en réduire leur taille) et l’offuscation (optimiser et réduire le nom des variables).
    Le but est d’alléger la taille des fichiers et pas forcément leur nombre.
  • Réécrire les entêtes HTTP afin de cacher toutes les ressources qui peuvent l’être (images, css, js…)
  • Utiliser le mod_gzip ou le mod_deflate d’Apache afin de réduire l’occupation de bande passante lors des téléchargements de ressources.

L’avantage avec Symfony2, c’est que plusieurs de ces recettes sont faciles à mettre en place, notamment le cache HTTP et la gestion des ressources statiques.

Dans symfony 1.x, il est possible de mettre en cache le HTML généré par PHP. Les versions cachées des pages sont stockées temporairement sur le serveur et servies au client directement. La nouvelle version du framework n’implémente pas cette fonctionnalité et se repose entièrement sur le cache HTTP. Avez vous lu l’incontournable RFC 2616 sur la spécification HTTP 1.1 ? D’après Fabien Potencier, tout développeur Web qui se respecte devrait la lire en entier. On y retrouve les concepts d’expiration et de validation. Symfony2 permet de manipuler le header HTTP et notamment les paramètres liés au cache. Ainsi, tous les éléments (proxy, serveur, reverse proxy, …) servant la réponse au navigateur peuvent lire le header et s’en servir afin d’optimiser les temps de chargement. Voir la présentation pour plus d’informations.

Assetic est un framework de gestion de ressources fourni avec Symfony2. Il facilite la gestion des images, des feuilles de styles et des javascripts de façon à optimiser les performances. Avec Assetic, il est par exemple très facile de regrouper plusieurs fichiers js ou css en un seul afin de diminuer le nombre d’aller retour serveur. On pourra aussi gérer très simplement la minification et la compression de ces ressources ou encore leur mise en cache. Tous ces avantages peuvent être obtenus en générant les versions « light » à la main. Avec Assetic, on continue d’avoir des fichiers lisibles et séparés, ce qui améliore les conditions de développement. Bref, l’essayer, c’est l’adopter.

Modularité

Symfony2 est un assemblage de composants qui peuvent très bien être utilisés chacun indépendamment selon les besoins du projet. Il est possible de construire un projet PHP en n’utilisant par exemple que le framework de gestion des formulaires. Retrouvez plus de détails sur la présentation de Hugo Hamon : Symfony2 en pièces détachées !

Cette modularité passe aussi par le découpage en bundles. Un bundle est une sorte de plugin, c’est-à-dire un ensemble de fichiers qui constituent une fonctionnalité (afficher une page, un forum, un flux RSS, …). Tout le code source d’un projet Symfony2 devrait se situer dans un ou plusieurs bundles. L’avantage est que les bundles peuvent être mis à disposition de la communauté ou réutilisés dans n’importe quel autre projet Symfony2.
Pour donner un exemple, Symfony2 est maintenant fourni sous forme de distribution. Une distribution est en fait un assemblage de plusieurs bundles dans l’optique d’avoir un framework adapté répondant mieux à la cible visée. Fabien Potencier a annoncé, au Symfony Live,  la sortie de plusieurs distributions : la Standard Edition, la CMS Edition (fournie avec des bundles permettant la gestion de contenu), la HelloWorld Edition (fournie avec le bundle HelloWorld), et surement bien d’autres à venir.

Silex est un projet de framework « allégé » basé sur Symfony2. Son objectif est d’offrir le minimum vital pour un projet PHP léger. C’est un bon exemple de la modularité de Symfony2 puisque Silex est constitué de quelques composants comme par exemple le HttpKernel, le Routing et l’EventDispatcher.

Git

« Si en 2011 tu n’as toujours pas essayé Git, tu as raté ta vie (ou presque). »

C’est un peu ce qu’il ressort de la conférence. En plus de celle de Scott Chacon dont Git était le sujet principal, beaucoup de présentations vantaient les mérites du système de gestion de version distribué. Une des raisons de l’engouement : Github. C’est le fameux site de « social coding » qui a été choisi pour héberger le code source de Symfony2. Grâce à lui, de nombreux anonymes en manque de participation à des projets comme celui-ci ont mis la main à la pâte et sont maintenant des contributeurs reconnus. La gestion des branches et des pull-request leur a permis une collaboration mieux maitrisée même avec une grosse équipe. Il reste encore du boulot, notamment sur la documentation ; si vous avez du temps et de la motivation, c’est le moment. D’autres sociétés se servent de Git, c’est le cas de Weka Entertainment. Le domaine du jeu social impose certaines conditions, notamment celle de sortir souvent des nouveautés et de pouvoir réagir vite en cas de problème. Afin de pouvoir livrer tous les jours ou presque, ils isolent chaque fonctionnalité dans une branche. La fusion des branches étant plus facile avec Git, la préparation du livrable consiste à choisir les fonctionnalités. Si l’une d’elles présente encore des bugs, elle n’est pas retenue. L’outil présente bien d’autres avantages par rapport à SVN. Essayez le, vous ne pourrez plus vous en passer !

Si vous n’êtes toujours pas convaincu, jetez un coup d’œil à Gource. Un outil permettant la génération de vidéos aussi captivantes qu’inutiles. Cela vous permettra de visualiser l’évolution de votre projet au fur et à mesure des différentes contributions. Pour les commits importants, l’effet feux d’artifice est garanti. Jugez par vous même avec la vidéo d’introduction de la présentation de clôture.

A méditer…

Dans la famille des fails je demande le succès et l’effet démo.

En effet, victime de leur succès, les organisateurs ont un peu sous estimé la taille de la deuxième salle. Cela ne nous a pas empêché de rester debout ou de nous asseoir par terre. Qu’est ce qu’on ferait pas pour Symfony2…

Coder en live, c’est difficile. Il vous est surement déjà arrivé de modifier du code et de mettre un certain temps avant de réaliser que vous ne tester pas le bon projet dans votre navigateur. Une belle démonstration de ce problème nous a été faite par Fabien Potencier. Son plus fidèle et mystérieux fan, le compte twitter @FabPotFacts s’est régalé. Comme quoi en mettant le créateur du framework et 500 développeurs dans la même salle, il nous faut encore 10 minutes avant de vérifier la configuration du serveur Apache.

Et après (pourquoi essayer Symfony2 ?)

Retour au sources du Web

Dans symfony 1.x, le Web est au centre du framework avec une approche MVC « push ». Symfony2 va plus loin. Les classes fondamentales comme la Request, la Response ou la Session ont été revues et simplifiées. On s’approche encore plus du fonctionnement de base du Web et des principes RESTful.  La gestion des ressources statiques, étape fondamentale pour l’optimisation est encore plus puissante avec Assetic. La gestion des routes s’enrichit sans changer le principe de base initié par symfony 1. L’API met à disposition tout ce qu’il faut pour tirer parti du cache HTTP sans réinventer la roue. Et enfin, Twig est le nouveau moteur de template par défaut. Il clarifie les vues et rend plus difficile l’intégration de logique métier.

Enterprise ready

Le PHP essaye encore de perdre son image de codeur du dimanche et de se placer dans l’entreprise. C’est déjà une réalité dans beaucoup de sociétés, le plus souvent pour des sites internet. L’industrialisation a également encore du chemin à faire. Symfony 1.x a su proposer un socle technique professionnel et sérieux. Il restait beaucoup de points d’amélioration. Sur ce sujet aussi, Symfony2 va plus loin.

D’abord, il s’appuie sur des standards de PHP :

De plus, la nouvelle version du framework reprend des concepts qui fonctionnent très bien sur d’autres plateformes que PHP/Symfony  :

Symfony2 plus compliqué ?

Dans son soucis de modularité et d’indépendance des composants, Symfony2 impose certaines contraintes de développements par rapport à symfony 1. Par exemple, le développeur doit importer ses classes lui même et déclarer ses namespaces. L’avantage est que l’on évite de charger toutes les classes inutilement. En résumé, Symfony2 est moins opaque que Symfony1.

On peut également se demander si accorder trop de libertés ne risque pas d’être problématique. En effet, Symfony2 propose plusieurs systèmes de configuration (YML, PHP, XML et même annotations) et n’impose pas de structure précise du projet. Il existe donc de très nombreuses possibilités et il peut être difficile pour un non-expert de trouver ses repères d’un projet à l’autre. Les distributions Symfony sont une première réponse à ce problème puisqu’elles proposent une manière d’organiser son projet.

À suivre…

Symfony2 est presque là, il est temps de l’essayer voir de l’envisager pour de nouveaux projets. Pour l’existant utilisant symfony 1.x, posez vous les bonnes questions. Est-ce que cette version fonctionne ? Est-elle rapide ? Est-elle maintenue ? La réponse est OUI. La deuxième version introduit tellement de (bons) changements qu’on est loin de pouvoir faire une simple montée de version. Si vous vous posez des questions sur l’avenir de vos applications en symfony 1, Marc Hugon peut vous aider grâce à sa présentation Quid de vos applications symfony 1.

Faire le choix stratégique d’utiliser Symfony2 pour des nouveaux projets n’est pas forcément prématuré. La documentation de base existe et grandit de jour en jour. Un nouveau Jobeet se prépare. Les API se stabilisent. Quelques sociétés ont des projets en production et semblent en être très contentes. Même des projets open-source s’y mettent comme l’incontournable moteur de forums phpBB (présentation). Les plus raisonnables attendront encore mais le temps de la réflexion peut commencer.  Comme pour les autres frameworks, tout dépend de la société et du projet. Quoi qu’il en soit, les nombreux avantages et nouveautés qu’il apporte en feront un (et même LE) framework PHP incontournable de demain. Que ce soit pour des applications de gestion ou pour les plus grands sites internet…