Questo articolo è stato scritto originariamente per Devmy, lo puoi trovare qui insieme a moltissimi altri articoli interessanti 😉
Pochi giorni fa vi abbiamo parlato di Moment.js, libreria JavaScript per gestire le date, e del perché non dovremmo più utilizzarla. Ma adesso?
Come già accennato, abbiamo a disposizione diverse alternative:
Quale libreria JS scegliere?
Tutte le soluzioni elencate sono estremamente valide: mettono a disposizione delle API immutabili e forniscono i file di definizione per TypeScript (a eccezione di Luxon che si appoggia a @types).
A questo punto dipende solo da quello di cui ha bisogno il nostro progetto: Performance? Integrazioni? Peso complessivo?
Queste statistiche possono aiutarci nella scelta:
Performance
Il grafico sottostante mostra il tempo medio che le librerie impiegano a svolgere le operazioni comuni di manipolazione.
Stelle su GitHub
- Day.js: 38k
- date-fns: 28.1k
- Luxon: 12.1k
- JS-Joda: 1.8k
Pacchetti dipendenti
- date-fns: 10k
- Day.js: 6k
- Luxon: 2.6k
- JS-Joda: 68
Issues aperte
- Day.js: 366
- date-fns: 282
- Luxon: 90
- JS-Joda: 14
Dimensioni
- Day.js: 2.8kb (minified, gzipped)
- date-fns: 19.5kb (minified, gzipped)
- Luxon: 20.9kb (minified, gzipped)
- JS-Joda: 39.8kb (minified, gzipped)
Ognuna di queste librerie eccelle in qualcosa ma, tra tutte, quella che più ha attirato la nostra attenzione è JS-Joda (e non solo perché il nome somiglia a qualcuno che stimiamo profondamente…).
JS-Joda non ha un aspetto un po’ Javoso?
Forse perché questa utility è il porting del backport Threeten, che è la base per l’implementazione JSR-310 del pacchetto Java SE 8 java.time (mentre Threeten si ispira a Joda-Time, condividendo concetti molto simili se non lo stesso autore).
JS-Joda
Gestire le date è la via per il Lato Oscuro. Le date conducono all’ira, l’ira ai bug; il bug conduce alla sofferenza. Ah… sento molti bug in questo codice.
Considerata la più grande libreria Jedi dell’epoca, JS-Joda è uno dei più abili utilizzatori delle date nella storia della galassia. Basato sul sistema del calendario ISO, mette a nostra disposizione oggetti totalmente indipendenti dal nativo, semplici e immutabili. Grazie a queste caratteristiche è in grado di manipolare le date a suo piacimento, validare i formati influenzati dal lato Oscuro e formattare con grande vigore.
Dove si utilizza JS-Joda?
JS-Joda è una libreria Vanilla senza dipendenze di terze parti e può essere inclusa in qualsiasi progetto JavaScript (o TypeScript): questo perché le librerie Jedi sono chiamate a portare la pace e la giustizia su tutti gli Stack Node della galassia, soprattutto in quelli minacciati dal lato Oscuro delle Date e del context switching.
Perché dovrei usare JS-Joda?
Come già detto, la scelta di una libreria JavaScript dipende da quello di cui ha bisogno il nostro progetto. Ma ecco i motivi per i quali JS-Joda ha attirato la nostra attenzione:
-
Veloce: JS-Joda è estremamente veloce. È da 2 a 10 volte più veloce delle librerie competitor. 🚀
-
Leggero: Il pacchetto minificato e compresso pesa solo 43kb ed è privo di ulteriori dipendenze.
-
TypeScript: JS-Joda fornisce al suo utilizzatore il suo set di definizioni TypeScript, senza la necessità di appoggiarsi a progetti terzi come @types.
-
Standalone: JS-Joda implementa le sue entità temporali in maniera indipendente dall’oggetto nativo Date, al contrario di librerie come Moment.js o date-utils che fanno semplicemente da wrapper.
-
Immutabile: A differenza di Moment.js, JS-Joda è immutabile: i bug a causa di aliasing inaspettati non erano previsti nel suo addestramento.
-
Domain Driven Design: Le sue API sono modellate sulla base del Domain Driven Design, con classi per ciascuno dei diversi casi d’uso, come LocalDate, ZonedDateTime o Period.
-
Robusto: Questa libreria vanta più di 1700 test case eseguiti tramite karma su Firefox, Chrome, Node e Pantomjs, portandosi dietro le permutazioni di test del progetto Threetenbp.
Conclusioni
Nonostante non sia sulla vetta dei download più elevati di npm, JS-Joda è un’ottima libreria per la manipolazione di date, con API intuitive per l’utilizzatore e estremamente veloci a runtime.
Un enorme punto a favore (imho) è quello di derivare da Threeten e Joda-Time, ereditando tutta l’esperienza incapsulata nel loro codice e la vastità di casi d’uso raccolti nel tempo dall’enorme community di Java.
E poi, diciamolo, ha decisamente il nome più figo 😉.
Crediti
- Immagine di copertina realizzata Simone Trovato Monastra ❤️
- La revisione dei testi è a cura di Elena Costa ❤️
- Il grafico delle Performance è stato preso da Best Moment.JS Alternatives di Jakub Kozak.