Node 0.10, cioè l'ultima versione disponibile di Node.JS, noto ambiente JavaScript basato su V8 per la realizzazione di Web applications, introduce alcune interessanti novità nel progetto tra cui una rivisitazione completa degli streams; nello specifico tale implementazione prende il nome di Streams2 che rappresenta il componente di input/output relativo al framework.
In Node.JS, gli streams sono delle interfacce astratte implementate da diverse tipologie di oggetti, anche una comune richiesta HTTP potrebbe essere considerata un stream; Streams2 è stato studiato appositamente per colmare le lacune presenti nella relase 0.8, questo perché, a detta degli stessi sviluppatori:
Node streams are great, except for all the ways in which they're terrible.
pause() e resume() nonché dei data events; il primo semplicemente non eseguiva la funzione per la quale era stato concepito, il secondo contribuiva a rendere di difficile soluzioni problematiche ricorrenti nell'implementazione degli streams, mentre gli ultimi complicavano l'esecuzione di task come per esempio il caricamento di sessioni utente.
Ora, sempre facendo riferimento a quanto affermato dal team del progetto:
'data' events, pause(), and resume() will still work as before (except that they'll actully work how you'd expect).
In Node 0.10 è disponibile un metodo read() per l'accesso in lettura agli streams, esso è in grado di restituire un buffer o meno e fa riferimento alla classe Readable; quest'ultima funziona inserendo i dati in una coda di lettura in modo che possano essere estratti in seguito attraverso una chiamata al metodo citato.
In ogni caso, per ragioni legate alla retrocompatibilità , sono disponibili i metodi readable.pause() e readable.resume(), essi gestisco lo stream sulla base dell'impostazione definita precedentemente all'ultimo aggiornamento per la quale i dati vengono emessi tramite un data event invece che sottoposti a buffering attraverso il metodo read().
La scelta di salvaguardare i fattori legati alla compatibilità con implementazioni datate dovrebbe rendere più semplice il lavoro di migrazione da parte dello sviluppatore una volta documentatosi sulle modifiche effettuate:
Old programs will almost always work without modification, but streams start out in a paused state, and need to be read from to be consumed.
Via Node.JS