Appuyez sur Entrée pour voir vos résultats ou Echap pour annuler.

Moment vs Luxon

Depuis aussi loin que je puisse me souvenir, moment a été une librairie JavaScript qui m’a fidèlement accompagné au travers des années. Ça été une librairie qui a facilité grandement les calculs de date, que ce soit pour ajouter ou soustraire des unités ou simplement la formater. Par contre, vous le savez probablement déjà, la librairie est maintenant rendue désuette. Aucune nouvelle fonctionnalité n’y sera ajoutée et, surtout, ils ne régleront pas le fait que l’objet moment n’est pas immuable, entre autre. Sur le site de moment, l’équipe nous suggère une alternative : Luxon!

Dans cet article, nous allons voir les différences et avantages de Luxon par rapport à moment.

Les objets moment NE sont PAS immuable

JavaScript liste le fontionnel parmi ses paradigmes, bien qu’il n’est pas purement fonctionnel. Le fait que les objets moment ne sont pas immuables peut apporter plusieurs problèmes, tel qu’une modification de son état via plusieurs unitées de traitements. Par exemple :

Dans cet exemple, on convertie la chaîne de caractères en objet moment pour obtenir le premier jour du mois, puis en se basant sur cette nouvelle date, on tente d’aller chercher le dernier jour du mois. Le fait ici que les fonctions startOf() et endOf() modifient l’instance de l’objet sur lequel elles sont appelées peut porter à confusion dans un contexte où le langage est fonctionnel par paradigme.

Avec Luxon, au contraire, on a la possibilité de faire ceci avec le résultat qu’on s’attendrait d’une librairie dans un contexte fonctionnel :

Les mois sont basés sur un index débutant à 1

Fort probablement pour des raisons d’uniformité avec JavaScript, les mois de la librairie moment sont basés un indice débutant à 0, ce qui peut porter à confusion les débutants. Par exemple :

Il pouvait y avoir un avantage lorsque JavaScript était utilisé uniquement pour dynamiser les pages, jadis. Par exemple, si nous voulions écrire la date en français, nous pouvions faire :

De nos jours, les librairies ont des extensions permettant l’internationnalisation des dates. Par exemple, Luxon nous propose :

L’internationnalisation est déléguée

Avec la version 13+ de node, l’internationnalisation avec Luxon est déléguée à l’API Intl au lieu de l’implémenter via la librairie. Par exemple, si nous voulions faire l’exemple ci-dessus avec moment, nous devrons utiliser la librairie moment qui contient les locales.

Pour constanter la différence, vous pouvez installer moment via npm et voir le dossier /node_modules/moment/locale :

On parle ici de 740 K de fichiers de langues qui ne sont probablement pas tous nécessaires, et moment nous annonce via un article sur son site qu’ils n’implémenteront pas le tree shaking pour réduire la taille du paquet.

Moment compilée et minifiée : 369,2 K

Luxon compilée et minifiée : 71,0 K

Ceci devrait réduire considérablement la taille du paquet final!

Conclusion

Aujourd’hui, nous avons vu certains des avantages de Luxon par rapport à moment. Il existe aussi des désavantages, comme pas exemple le fait que moment est une librairie qui est encore très utilisée. Au moment d’écrire ceci, il y a encore plus de 15 million de téléchargements alors que Luxon se limite à 2 million de téléchargements. Vous pouvez donc vous imaginer que les librairies et frameworks fortement couplés avec moment ou qui supportent moment en plus des dates natives ne sont pas encore tous à jour pour la migration vers Luxon.

Comme pour tout choix technologique, il faut préallablement faire une analyse d’impact pour éviter les erreurs 🙂

Sur ce, bonne semaine! Merci de nous lire.

Suivez-nous par courriel!

Saisissez votre adresse courriel pour vous abonner au blog d'Ezo et recevoir une notification de chaque nouvel article par email.