Manipuler les dates et heures en JavaScript est une tâche assez fastidieuse. L’API native de gestion des dates est compliquée à utiliser surtout pour des cas avancés, où l’on a besoin d’effectuer des opérations complexes de manipulation et d’affichage.
C’est dans ce contexte que la célèbre librairie Moment.js a vu le jour en 2011, permettant d'analyser, valider, manipuler et afficher les dates et heures à l'aide d'une API claire et compacte.
Depuis ce temps, l’écosystème Javascript a changé de visage à plusieurs reprises, alors que Moment n’a pas pu suivre cette évolution. La priorité pour l’équipe de maintenance était de garder la stabilité de la librairie vu le succès énorme qu’elle a connu, en devenant l’outil de facto de manipulation des dates et heures que ça soit du côté client (Navigateurs, Mobile) ou du côté serveur (Node.js).
De nos jours, on reproche à la librairie sa taille trop grande, d’environ 70Ko si on prend la version minifiée qui inclut les configurations d’internationalisation. Ceci impacte les performances surtout du côté client.
D’ailleurs, à partir de ce mois-ci, Chrome DevTools commence à afficher des recommandations d’alternatives pour les librairies volumineuses. La première cible était Moment en attendant d’implémenter d’autres recommandations dans les prochains mois.
On critique aussi à la librairie de générer des objets mutables, c-a-d si on modifie des propriétés d’une copie, l’objet d’origine sera aussi modifié. Ce comportement pose un problème surtout pour les développeurs qui utilisent la librairie pour la première fois. Il y a des solutions de contournement qu’on propose dans la documentation, mais cela était bien meilleur si on pouvait résoudre ce problème dans une version majeure (v3 par exemple).
L’équipe de maintenance de la librairie a décidé de considérer Moment comme un projet legacy en mode maintenance seulement. Ceci signifie que :
Pour les nouveaux projets, l’équipe de maintenance de Moment recommande l’utilisation des librairies suivantes :
En attendant que Javascript implémente une meilleure API pour la gestion des dates et heures (voir cette proposition), les développeurs doivent se préparer pour une bascule vers les alternatives de la librairie Moment, afin d’assurer une meilleure performance et d’implémenter une architecture plus moderne sur les nouveaux projets.