Mithril JS : le Framework Javascript super léger

Partager

Article mis à jour le 24 février 2023 | Publié le 27 mars 2019

Vous êtes fan de Angular et React mais vous trouvez que leur temps de chargement laisse à désirer ?
On a trouvé une solution pour vous : Mithril.JS. Ce framework Javascript permet entre autre de créer des single page applica (SPA) avec une bibliothèque de seulement 8ko !

Vous êtes fan de Angular et React mais vous trouvez que leur temps de chargement laisse à désirer ?
On a trouvé une solution pour vous : Mithril.JS. Ce framework Javascript permet entre autre de créer des single page application (SPA) avec une bibliothèque de seulement 8ko !

Léger et puissant, Mithril a la cote 😉

Si vous ne le savez pas le mithril est un métal de fiction instauré par l’auteur britannique J. R. R. Tolkien dans son oeuvre Terre du Milieu. Utilisé par les elfes dans le Seigneur des anneaux, ce métal représente la légèreté, la malléabilité ainsi que la résistance.
Revenons en à nos agneaux, euh nos moutons : Mithril.js se considère avant tout comme une bibliothèque javascript puissante mais surtout légère !
En effet, ce framework ne nécessiterait que 6,4ms pour charger ! À ce niveau, on est loin devant Angular et React et c’est ce que Mithril nous montre au travers de la comparaison avec d’autres frameworks javascript qu’il propose sur son site internet.

Comparaison de Mithril avec d'autres frameworks javascript
Comparaison de Mithril avec d’autres frameworks javascript. Ce screen provient du site internet de Mithril.

Une philosophie minimaliste

Si Mithril est rapide c’est surtout dû à son poids, mais pas que : il ne nécessite pas de bibliothèques tierces !
Mithril répond ainsi à la question épineuse du “pourquoi embarquer autant de fonctionnalités dans un framework alors qu’on en utilise seulement 5% “.
Mithril se définit alors comme starter-pack de fonctions javascript vous permettant de créer vos propres composants Mithril avec des fonctions de routage prédéfinies, punto basta.
Si l’on cherche encore une fois à comparer Mithril à React ou Angular, considérez plutôt Mithril comme un van disposant seulement d’un matelas et de quelques rangements ; et les deux frameworks comme un bon gros camping-car de standing capable de loger votre voiture.
C’est une comparaison très grossière, cependant l’idée est là.

Utilisé par des entreprises, des plateformes et même un jeu !

Vimeo, Nike ou encore FitBit ont fait le choix d’utiliser Mithril, c’est également le cas des plateformes open source Lichess et Flarum. Mithril fait même parti du jeu Guild Wars 2, oui oui dans le jeu !
Bien que la V1 soit sortie en 2017, Mithril compte à ce jour plus de 10 900 stars, 800 forks, 220 contributeurs et 60 releases sur Github. Cela représente une communauté plutôt active !

Une compatibilité avec presque tous les navigateurs

Mithril a été écrit à partir de la version Javascript ES5, cependant il s’affirme être “fully compatible with ES6”. En parlant de comptabilité, Mithril indique sur son site internet que les navigateurs internet compatibles sont les suivants : Internet explorer 11, Edge, Firefox ESR ainsi que les deux dernières versions de Firefox, Safari et Chrome.

Des similitudes avec React et Angular

Bien que Mithril cherche à se démarquer par sa philosophie, il comporte des similarités avec ses deux principaux concurrents.

Tout d’abord comme React, Mithril utilise :

La différence la plus évidente entre React et Mithril réside dans la portée de ces frameworks.
Une application React s’appuie sur des bibliothèques tierces pour gérer le routage, le XHR et la gestion des états. Mithril, au contraire permet de gérer ces éléments nativement.
Le fait d’utiliser des bibliothèques annexes offre certes la possibilité de personnaliser ses piles en fonction de ses besoins, cependant l’architecture d’un projet basé sur React peut énormément varier d’un projet à un un autre et cela implique donc un poids conséquent en raison des bibliothèques imbriquées.

En comparaison avec Angular, Mithril utilise lui aussi une panoplie d’outils pour divers aspects des applications Web (Routage, XHR).
Concernant le reste, les deux frameworks semblent plutôt différents. Angular contrôle des vues HTML à l’aide d’un système de directives javascript. Cela a pour but d’évaluer des expressions de type JS dans des attributs HTML. Pour y parvenir, il se sert d’un analyseur et d’un compilateur javascript.
Mithril quant à lui utilise pour contrôler ses vues du code Javascript simple, et le contrôle du flux est effectué à l’aide de mécanismes intégrés tels que des opérateurs ternaires ou Array.prototype.map.

Pourquoi utiliser Mithril ?

En réalité, Mithril permet comme Angular et React de créer des applications interactives, mais lui les rend plus “réactives”.
Il représente surtout une solution idéale pour créer des widgets javascripts intégrés.
Également, il est particulièrement efficace pour améliorer les performances des applications conçues pour la communication en temps réel.
Ces spécificités sont dues aux éléments présents dans le coeur de Mithril, mais qu’est-ce qu’il y a dedans ?

Une fonction m( ) pour décrire une structure HTML

Il est possible de décrire n’importe quelle balise HTML à l’aide la fonction m( ).
Donc si vous souhaitez lui ajouter une classe, un id, un tag ou encore y spécifier du texte c’est très simple de le faire grâce à cette fonction.

Par exemple :

m(« a », {class: « bouton », href: “https://www.numendo.com” rel=”nofollow” }, « Cliquez sur moi « )
permet de créer un lien cliquable dont la classe est :”bouton”.

Créer un composant

Pour créer un composant Mithril il suffit de définir une vue à l’aide de l’attribut “view”.

Voici un exemple avec la variable Plop.

var Plop = {
view: function() { return m(« main », [ m(« h1 », {class: « title »}, « Un titre éditorial de niveau 1 »), m(« button », « Cliquez sur moi « ),
])
}
}

Ensuite, pour afficher un composant il faut utiliser la fonction m.mount.

Ainsi, si on veut utiliser le composant précédemment déclaré, on va le faire de cette manière : m.mount(root, Plop).
Cette déclaration veut dire qu’on chercher à exécuter le composant Plop dans la variable root. “root” est lui aussi une convention d’écriture, d’ailleurs également utilisé dans Angular.
Il représente une variable permettant de cibler l’élément HTML body ( root = document.body).

Une fonction m.request pour appeler une requête XHR

Ayant pour but de créer des single page application, Mithril utilise le XMLHttpRequest (XHR), qui est tout simplement un objet javascript manipulable qui permet de récupérer des objets XML,JSON ou encore HTML via l’entête HTTP d’une page. Son but ? Le XHR vous permet de charger des éléments de façon asynchrone sur votre page.
Ainsi dans la fonction m.request vous devez renseigner les champs :

m.request({
method: « POST », // GET, PUT, UPDATE …
url: « https://api.numendo.com/skills »,
data: {skill: “javascript”, type: [“front”,”back”]},
})

Si vous voulez en savoir plus sur la fonction m.request de Mithril et le XHR, vous pouvez accéder à l’exemple type proposé sur la documentation.Le routage est simplement une façon de passer d’une vue à une autre dans une application à plusieurs vues. En réalité c’est ce qui permet aux SPA d’exister.
Son principe consiste à donner une adresse spécifique à un contenu, ce qui permet d’y accéder sans pour autant changer de page. C’est quelque chose d’assez transparent pour l’utilisateur, dans la mesure où il peut penser qu’il navigue entre plusieurs pages, alors qu’en réalité non. Le contenu sur la page diffère tout simplement parce qu’on appelle une autre vue disponible à une autre adresse .Il est même possible d’utiliser les flèches “précédent” et “suivant” d’un browser pour naviguer dans les vues d’une application.
La fonction de routage Mithril permet ainsi d’appeler un composant sans recharger le document HTML et ça marche de cette manière.

var Home = {
view: function() {
return m(« a », {href: « #!/hello »}, « Enter! »)
}
}Ce premier composant crée simplement un lien vers #!/hello, dont le texte affiché est “ Entrer”. La partie “#!” est connue sous le nom de shebang, il s’agit d’une en-tête utilisée pour les fichiers texte. Cela permet de préciser au système d’exploitation que le fichier en question n’est pas un fichier binaire mais un script (ensemble de commandes).
Il s’agit d’une convention utilisée dans les SPA pour indiquer que le contenu qui suit (la partie hello) est un chemin de route.

m.route (root, « /home », {
« /home »: bonjour,
« /hello »: plop,
})Ensuite, il suffit d’utiliser la fonction m.route afin de spécifier les chemins de route à emprunter et par conséquent les vues à gérer.
La première ligne décrivant “root, « /home » définit la vue à afficher par défaut, donc si un shebang n’est pas précisé derrière une URL, ce sera cette vue qui sera affiché.
Dans notre cas, si l’on ouvre un navigateur à l’adresse http://localhost, on sera redirigé à l’adresse http://localhost/#!/home
Les autres lignes définissent des chemins de route différents. Derrière ces chemins de route, on peut y spécifier une action à effectuer, comme par exemple exécuter une fonction.
C’est notre cas pour les lignes « /home »: bonjour et « /hello »: plop qui traitent respectivement les variables bonjour et plop.

Vous l’aurez compris, Mithril est un outil puissant et surtout ultra-léger !
De plus, si vous avez déjà utilisé React, il vous sera facile de la prendre en main, d’autant plus que leur paradigme n’est très différent.
A vous de faire le test ! Et vous, êtes-vous plus team Angular, React ou Mithril pour développer une single page application ? Peut-être que vous utilisez d’autres frameworks, si vous voulez découvrir d’autres technologies Javascript, consultez notre article sur les meilleures frameworks javascripts.

Vous serez peut-être aussi intéressé par ces articles

Image de mise en avant pour notre article portant sur Sylius, le framework php e-commerce

Issu de Symfony, Sylius est un framework php orienté e-commerce embarquant des bundles destinés à la vente en ligne. Pourquoi choisir Sylius ?...

Vignette Dot Js pour blog Numendo

Dans un précédent article sur ReactEurope nous vous disions qu’il n’y a pas qu’aux États-Unis qu’il y a des supers conférences : nous...

Nest.JS : le framework Node.JS nouvelle génération

Nous avons remarqué que les frameworks sont vos sujets préférés ! C’est pourquoi nous vous proposons de parler cette semaine de Nest.js : un...

Ce site web stocke des données telles que les cookies pour activer les fonctionnalités nécessaires du site, y compris l'analyse. Vous pouvez modifier ces paramètres à tout moment ou accepter les paramètres par défaut.
Préférences en matière de dépôt de données

Lorsque vous visitez des sites Web, ils peuvent stocker ou récupérer des données dans votre navigateur. Ce stockage est souvent nécessaire pour la fonctionnalité de base du site Web.
L’analyse peut être utilisée comme stockage. La confidentialité est importante pour nous, vous avez donc la possibilité de désactiver ce type de stockage qui n’est pas être nécessaire pour le fonctionnement de base du site Web. Le blocage de l’analyse peut avoir un impact sur votre expérience sur le site Web.

Nous utilisons des cookies pour personnaliser votre expérience sur Numendo.