Travaillons ensemble !

Services

Moment.js, pour la retraite c’est le moment !

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.

 

Qu’est ce qui ne va pas ?

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).

 

Vers quel futur ?

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 :

  • Aucune nouvelle fonctionnalité ou version majeure ne verra le jour sur le projet (pas de V3).
  • Aucun effort ne sera commis pour réduire la taille de la librairie.
  • Les problèmes de sécurité seront pris en charge d’une manière sérieuse par l’équipe de maintenance.
  • L’équipe de maintenance se réserve le choix de traiter ou non les bugs remontés, surtout pour les demandes qui datent de plusieurs années.

 

.. et les alternatives ?

Pour les nouveaux projets, l’équipe de maintenance de Moment recommande l’utilisation des librairies suivantes :

  • Luxon : peut être considéré comme évolution de Moment, créé par l’un des contributeur du projet.
  • Day.js : une alternative minimaliste et légère pour remplacer Moment (2Ko, objets immutables,...).
  • date-fns : expose plusieurs fonctions permettant de manipuler les dates et heures de façon simple.

 

Conclusion

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.