La MEAN-Stack c’est quoi ?
Une techno à la mode ou un véritable atout ?
Si vous faites partie de ceux qui parcourent les sites de dév afin de connaître les dernières nouveautés, vous n’avez pas pu le rater. Pour tous les autres, si vous êtes développeur et que vous n’en avez encore jamais entendu parler, c’est ici votre dernière chance de ne pas sombrer dans l’obsolescence.
Tout comme LAMP, MAMP ou autre WAMP, MEAN-Stack est un acronyme annonçant une pile de différentes technologies. On reconnaitra ainsi Mongodb – ExpressJs – AngularJs – NodeJs.
On remarquera tout de suite l’excès de suffixe « js » qui annonce clairement le language phare : le JavaScript.
Chaque technologie a sa fonction propre, qui correspond à une couche de l’architecture MEAN.
L’effet de mode actuel pour cette pile d’environnement est porté par plusieurs avantages reconnus :
- D’excellentes performances
- Une architecture utilisant le JavaScript de bout en bout (ce qui nécessite du développeur la maîtrise d’un langage unique)
- La simplicité de mise en place
Pour le côté fonctionnel de la MEAN-Stack, AngularJS gère le côté client en tant que SPA (Single Page Application). Il envoit ainsi ses requêtes à Express qui les reçoit, les traite et les transfère à NodeJs. Ce dernier se charge de gérer cette pile de requête afin de les faire interagir avec la base de données MongoDB.
A noter que selon des tests de performances, MEAN serait le plus rapide sur un serveur NginX.
MongoDB
MongoDB est une base de données orientée documents qui utilise le JSON comme format de stockage, mais également dans ses requêtes. Son côté « JS-Friendly » vient de ce format, et de ses drivers Javascript qu’ils soient natifs ou mis à disposition par le plugin Mongoose.
Le stockage en document permet une plus grande souplesse dans les données enregistrées puisqu’il n’y a pas de table et donc pas de schémas de table. On peut ainsi ajouter simplement une nouvelle propriété (colonne dans une SGBD) sans que cela pose de problème. Cependant l’absence de schéma oblige le développeur a bien réfléchir à son modèle afin que la gestion du stockage ne deviennent pas rapidement un « fourre-tout ».
MongoDB inclue un système complet d’indexation et permet également le stockage de données spatiales avec ses fonctions SIG (MongoGIS). Il ne supporte par contre pas les transactions, les jointures ou les schémas de table comme expliqué précédemment.
Très simple à mettre en place, on peut s’affranchir d’un administrateur de base de données. Attention néanmoins à ne pas oublier d’activer l’authentification qui, elle, est désactivée par défaut.
Node.js
Node.js est une plateforme JavaScript orientée serveur, c’est à dire qu’elle intègre entre autres, des librairies d’in-/output que l’on ne retrouve pas côté client. Elle tourne sur le moteur V8 de Google reconnu pour sa rapidité d’exécution du JavaScript.
Node.js empile les requêtes utilisateurs reçues par Express. Il les traite les unes après les autres de manière mono-thread et asynchrone. C’est donc via un callback que le résultat du traitement peut être géré. La queue de traitement quant à elle est multi-thread (workers).
ExpressJS
ExpressJs est un framework Node.js qui permet la mise en place rapide d’un serveur de requêtes http. Il récupère ainsi les requêtes Ajax du client et les ajoute à la pile de requêtes qui doivent être traitées par Node.js.
ExpressJs gère également les codes erreurs http retournés aux clients lors des requêtes Ajax.
AngularJS
Plus besoin de le présenter, AngularJs, le framework poussé par Google est devenu une référence pour ce qui est des « Single page application ». Bien que populaires, ses concurrents comme Ember.js, Knockout.js, Sproutcore,… ont un léger retard sur Angular qui actuellement en version 1.3, annonce déjà une version 2.0 pour la fin 2015/ début 2016. A noter que la version 2.0 subit de grand changement qui ne seront pas compatible avec la version 1.x. (ex: suppression des controllers, des $scopes,…).
Pour les DOM très volumineux, AngularJs montre néanmoins ses limites et c’est sur ce terrain que se profil gentiment le Framework ReactJs de Facebook et son DOM virtuel.
Générer un projet MEAN
La génération de projet peut se faire manuellement en passant par les étapes d’initialisation décrites dans la doc de chaque composant, ou plus facilement en utilisant un outil de scaffolding mis à disposition.
Il y’a deux projets populaires pour la création de structure MEAN.
- Mean.io (http://mean.io/)
- Mean.js (http://meanjs.org/)
Mean.io est le premier projet qui a été créé pour les projets MEAN et utilise Yeoman pour le scaffolding. Comme il est plus ancien, la communauté est plus grande, mais cet avantage risque de changer avec le temps.
Mean.js est lui un fork de Mean.io, et a été créé par le même auteur que pour son concurrent. La décision de ce fork a été motivée par une séparation du développeur du projet principal (je vous laisse voir l’historique et les raisons par vous-même). Comme le projet est plus récent, la communauté est moindre, mais il a l’avantage d’avoir une excellente documentation. L’outil de scaffolding est par contre différent puisque c’est un custom cli nommé « mean ».
Dois-je passer à la MEAN-Stack ?
Si comme moi vous vous demandez si vous devez également vous tourner vers la MEAN-Stack pour vos prochaines applications Web, plusieurs questions sont à se poser :
Etes-vous allergique au JavaScript ?
Inutile de vous dire que si vous n’êtes pas convaincu par le JavaScript ou ne supportez pas son idéologie et ses paradigmes, le MEAN n’est pas pour vous. Comme vu au début de cet article, Mean met en avant le JavaScript sur tout les fronts et un code efficace ainsi que des tests bien conçus semblent indispensables pour des performances optimales.
Utilisez-vous des bases de données relationnelles en parallèles ?
Si vous travaillez dans un environnement qui utilise déjà abondamment les bases de données relationnelles dans des projets connexes, et que ces données sont susceptibles d’être consommées par votre nouveau projet, il semble évident que l’architecture présentée ici n’est pas adaptée. Ou alors nécessiterai une réplication des données dans MongoDB.
Cependant il est possible de garder la même architecture en ne changeant que la base de donnée, puisque certaines DB relationnelles fournissent également des drivers pour JavaScript (ex: PostgreSQL).
Quel est l’avantage alors ?
L’avantage principal, c’est les performances ! Actuellement, je ne crois pas qu’il y’ait plus rapide et réactif comme système de stockage qu’avec cette structure.
On notera également la facilité de mise en place, puisqu’avec les outils de scaffolding, on se retrouve rapidement avec un environnement prêt au développement, avec en bonus des outils de tests pour le TDD.
Enfin, le côté Full JS est également un point non négligeable pour les développeurs JavaScript, surtout lorsqu’on voit actuellement la vitesse de traitement qu’offre les moteurs JS tel que V8.
Merci pour ces clarification, cela m’était très utile pour la compréhension de chaque élément de MEAN-Stack.