Vers quelle Technologie aller pour réussir votre projet web (2ème partie)

Lorsque le navigateur demande un site web au serveur, il fait une requête. Lors de l’utilisation d’un Framework, la réponse à cette requête est généralement traitée de deux manières :

  • Soit le Framework fait le traitement de la requête et renvoie une page HTML complète, le rendu est donc fait côté serveur et le navigateur ne fait qu’afficher la page.
  • Soit le Framework lit la requête dans le navigateur, fait une requête à une ou plusieurs urls ( API REST )  si besoin pour récupérer des données. Les données sont affichées directement dans le navigateur en modifiant le HTML, c’est le rendu côté client.

Dans cette seconde partie, nous allons aborder le rendu côté serveur pour les Frameworks PHP et Javascript.
Le langage PHP a énormément de Frameworks mais je ne parlerai que de Symfony 2/3 et Zend 2. Il sont pour moi les deux solutions les plus pérennes et les plus viables. En effet, elles sont soutenues et maintenues par des entreprises en coopération avec la communauté.
Pour Javascript, j’ai choisi ExpressJS avec un moteur de template; vous pouvez choisir celui que vous voulez car il font tous le même job : faire le rendu de la page en HTML dans le serveur. Fait par un seul homme à ses débuts, il est aujourd’hui maintenu par une grosse communauté et cet effort est soutenu par StrongLoop qui est une entreprise appartenant à IBM.

La Cathédrale* : le rendu fait côté serveur

C’est la technique “historique” de génération de page web, en voici la séquence simplifiée :

  1. Le navigateur envoie une requête au serveur.
  2. Le serveur renvoie du html avec les fichiers de styles et le javascript.
  3. Le navigateur affiche le html, utilise le css contenu dans les fichiers de style pour disposer et styliser les différents tags html.
  4. Le javascript s’exécute et met en place les interactions de l’interface du site ( popin lors du clic sur un mot ou un bouton, lecteur média, …etc ) et si besoin récupère des données supplémentaires à afficher.

Remarque :
Les CMS présentés dans la précédente partie utilisent en général cette technique pour afficher les sites web. Mais il existe des plugins qui permettent de faire des rendus côté client, nous détaillerons cette technique dans la prochaine partie.
jesus love frameworks

Communauté

Zend Framework et Symfony ont des communautés très larges. Zend Framework est considéré comme le framework historique de PHP mais il connaît un déclin fasse à Symfony depuis quelque années.
Les communautés de Zend Framwork et de Symfony sont respectivement animés par Zend Technologie et SensioLabs . Ces entreprises soutiennent l’effort de développement fait par la communauté mais sont très largement les moteurs des différentes sorties de versions. Beaucoup d’entreprises proposent aujourd’hui des prestations dans ces deux technologies mais Symfony 2 est le plus choisi ces dernières années.
ExpressJS est l’un des premiers framework NodeJS. ExpressJS est un peu l’équivalent de Zend pour NodeJS. De nombreux tutoriels existent, il est donc simple de trouver une réponse en cas de blocage.

Documentation

Zend Framework a eu une documentation passable à la sortie de la version 2. Mais ils se sont améliorés au fil des sorties des versions mineurs (2.x). La version 3, qui est sortie récemment, à mis en place une excellente documentation pour ses packages de base. Des tutoriels sont mis en ligne depuis peu concernant l’utilisation des différents modules à l’image de Symfony.
Symfony 2 a quant à lui une très bonne documentation. La documentation de référence est complétée par le CookBook qui permet d’avoir des cas pratiques d’utilisations des différentes parties du framework appelé bundles. Cela facilite grandement la compréhension des différents bundles de base et permet ainsi de réduire le temps d’apprentissage du framework.
ExpressJS étant très simple, sa documentation est moins lourde à parcourir que les deux gros frameworks PHP. Il n’y a que la documentation de référence sur le site officiel mais trouver un tutoriel sur un cas d’utilisation est très simple.

Infrastructure

Les frameworks PHP nécessitent une une infrastructure classique LAMP ou LeMP ( Linux, Apache/eNginX, Mysql/MariaDB, PHP ), mais requiert une configuration du serveur HTTP (Apache ou eNginX) plus poussée. Il s’installe difficilement chez les hébergeurs mutualisés, mais ce n’est pas non plus  impossible. Je vous conseille vivement d’utiliser eNginX couplé à PHP-FPM ou à HHVM pour augmenter le temps de traitement PHP.
ExpressJS fonctionne avec le serveur HTTP intégré à NodeJS. Sur les grosses applications NodeJS, on peut voir un serveur eNginX en face du serveur NodeJS. c’est à dire que la requête du navigateur va d’abord passer par eNginX avant d’aller sur un serveur NodeJS. Cela permet d’avoir eNginX qui partage la charge entre plusieurs serveurs NodeJS dans la même machine.
Je vous conseille également de mettre en place un/des serveur(s) de Cache afin d’accélérer la navigation de l’utilisateur.

Concepts à maîtriser

Les frameworks PHP et Javascript requièrent  la compréhension des patrons de conceptions (Design Pattern ). Le patron de conception ( c’est vraiment moche la traduction 😀 ) le plus important à maîtriser est le MVC : Modele, Vue, Controller.
Symfony 2 et 3, Zend 1 et 2 et ExpressJS 4 utilisent d’autres Design Pattern comme le Singleton, la Factory, l’Observer, la Façade… etc. Il faut bien comprendre leur fonctionnement global pour bien les utiliser. C’est le seul moyen d’architecturer correctement les différentes fonctionnalités en utilisant toute la puissance offerte par ces frameworks.
Il faut savoir correctement organiser les données dans la base de donnée. Avec une base de donnée relationnelle, l’organisation des données entre les tables est cruciale dans la performance de le traitement des requêtes. Les bases de données NoSQL sont plus permissives dans leur organisation et demandent donc une plus grande rigueur dans l’organisation des schémas.
Enfin, il faut savoir mettre en place des tests utiles afin d’éviter des régressions lors du développement. En plus de tous cela, je vous conseille de mettre en place un déploiement continu de l’application.

Avantages

Ces frameworks permettent d’accélérer le développement. Ils ont tous un système de modules. Cela permet d’avoir une séparation claire des fonctionnalités dans le code. Cela permet aussi de récupérer des modules réaliser par d’autre personne afin de gagner du temps sur le développement. Ils incorporent des modules de base qui leur donnent une grande flexibilité et leur permet d’être le socle d’une large variété d’applications.

Chef de projet

Grande liberté dans les fonctionnalités. Une gestion du SEO peut s’adapter aisément. Les templates étant fabriqués par les développeur, les designs peuvent être personnalisés pour les fonctionnalités. Accélère le développement des fonctionnalités.

Développeur

Les Frameworks cités plus haut ont des outils pour vous guider dans l’implémentation des fonctionnalités. Ils permettent de limiter les problèmes techniques et incite aux bonnes pratiques d’écriture du code. Enfin, Beaucoup de cas pratiques différents sont disponibles sur le web pour vous aider.

Inconvénients

Étant un ensemble complexe, un framework demande un temps d’adaptation. Ce temps est relatif à l’expérience du développeur. Ce dernier doit donc faire preuve de discernement lors de la recherche d’informations pour ne pas tomber dans des pièges.