Il mondo del Web, per anni, è stato legato e ancorato sempre alle stesse tecnologie: HTML, PHP e MySQL. Grazie al loro perfezionamento nel tempo e alla diffusione di CMS (WordPress, Joomla etc…) basati su di esse, sono riuscite a ritagliarsi un ruolo di punta per lo sviluppo dei siti o applicativi Web.
Per fortuna negli ultimi anni questo mondo si è arricchito di nuovi linguaggi di programmazione, di nuove tecnologie e di nuovi framework, diventando una vera e propria giungla! Una su tutte si è fatta strada per la sua stabilità, scalabilità e le sue performance: NodeJS.
NodeJS è una tecnologia che permette di sviluppare in Javascript, ma lato server. In sostanza, uno sviluppatore front-end che utilizza Javascript come pane quotidiano potrebbe tranquillamente sostituire uno sviluppatore back-end o comunque affiancarlo nelle progettazione del core dell’applicativo. Stiamo parlando di uno strumento potentissimo e sfruttabile tramite un linguaggio di programmazione alla portata. Detto ciò, per comprenderne realmente le potenzialità scendiamo nel dettaglio tecnico analizzandone i vantaggi.
Architettura asincrona
Uno dei punti fondamentali su cui si basa NodeJS è la sua asincronìa. Quando si sviluppa non vengono necessariamente seguite le istruzioni in maniera sequenziale, ma qualora ci fossero delle chiamate esterne ad esempio una chiamata ad un server remoto o un accesso al filesystem più lento, NodeJS si occuperà di lasciare l’istruzione in attesa facendo partire un altro processo ( thread ) in contemporanea che si occuperà delle restanti istruzioni concludendo, successivamente, la chiamata in sospeso tramite l’apposita callback. Questo tipo di approccio permette velocità e un basso consumo di RAM a scapito del processore che invece sarà sempre attivo nell’interpretare subito tutte le istruzioni pronte ad essere eseguite immediatamente.
Scalabilità
Se NodeJS si chiama in questo modo, uno dei motivi è la sua scalabilità. NodeJS si basa sulla modularità, sullo scrivere porzioni di codice dedicate ad un solo compito, categorizzandole e dandole un nome per poi essere riutilizzate o riciclate nei futuri applicativi o progetti. Questi moduli potranno affiancare quelli nativi di NodeJS generando così un’infinita rete di moduli dove ognuno di essi è un “nodo”.
Compilazione
Se NodeJS dà la possibilità ai programmatori front-end di programmare lato server con lo stesso linguaggio di programmazione, ovvero Javascript, è solo grazie al motore di compilazione Javascript V8 di Google che permette di tradurre le istruzioni Javascript di alto livello in un linguaggio eseguibile dal server o qualsiasi altra piattaforma Windows, OSX e Linux. Questa potenzialità permette, ad esempio, ad un applicativo Web di produrre semplicemente HTML da trasmettere al browser dell’utente senza la necessità di inviare i sorgenti poiché l’eseguibile stesso ha già tutto il necessario per funzionare in maniera autonoma (standalone).
Produttività degli sviluppatori
È statisticamente provato che NodeJS aumenta la produttività degli sviluppatori. In un’azienda, solitamente, si tende ad avere sviluppatori front-end e sviluppatori back-end in due team diversi che collaborano. Grazie a NodeJS, invece, automaticamente uno sviluppatore che ha sempre lavorato in front-end potrebbe benissimo lavorare anche sul back-end poiché conosce già il linguaggio di programmazione da utilizzare. Questo approccio assicura ad un’azienda con un sostanzioso numero di sviluppatori di abbattere notevolmente i costi di un applicativo, ma, soprattutto, rende performanti gli sviluppatori stessi che con gli strumenti messi a disposizione potranno realizzare software di un certo livello in molto meno tempo (e stress) di quanto ne impiegherebbero utilizzando il PHP (uno a caso).
Performance degli applicativi
Le perfomance degli applicativi NodeJS dipendono soprattutto dai vantaggi espressi nel punto precedente riguardo la sua asincronìa, ma a vantaggio di ciò bisogna anche citare la trasmissione dei dati. La trasmissione dei dati tra i moduli e il client stesso avviene minimizzando quanto il più possibile le richieste di connessione. NodeJS restituisce rigorosamente in HTTPS le informazioni al client in maniera del tutto invisibile non appena essi sono pronti e mantenendo viva la connessione. Questo permette di avere un applicativo reattivo e veloce che elabora le istruzioni dietro le quinte, ma che risponde con blocchi di dati non appena vengono elaborati e messi a disposizione. Ovviamente, tutto ciò non risulta subito tangibile in applicativi semplici, ma in caso di progetti piuttosto corposi questo gioverà sicuramente agli sviluppatori che non dovranno far altro che continuare a programmare in Javascript.
Il mondo del Web come potrebbe beneficiarne realmente?
Nel web NodeJS è supportato principalmente dai framework più famosi: Express, MySQL,motori di template etc. Tutto è già disponibile. Basta installare pochi moduli e abbiamo fin da subito la possibilità di leggere file HTML, connetterci a un db MySQL, manipolare Layout e mandarli in output ottenendo pagine dinamiche per poter realizzare un vero e proprio sito Web. Purtroppo, nella maggior parte dei casi gli utenti hanno bisogno di un CMS pronto e rodato come può esserlo WordPress o Joomla, Prestashop o Magento, ovvero soluzioni pronte, ma scritte in PHP. Questo restringe il campo di chi opterebbe per NodeJS. NodeJS sarebbe ideale per un applicativo progettato da zero, da sviluppare, da rendere stabile, scalabile e performante. NodeJS è quasi 20 volte più veloce di PHP e compete con tutti gli altri linguaggi di programmazione che sgomitano per farsi largo nel Web.
Casi di successo noti: Paypal
A testimoniare in favore di NodeJS potrebbero benissimo essere realtà vive e vegete come Paypal, Groupon, Twitter e molti altri. La storia più conosciuta è quella di Paypal. L’azienda, un giorno, decise di rifare l’applicativo mobile incaricando il proprio team di sviluppatori di realizzarla in Java. Ci furono, però, alcuni sviluppatori che proposero di realizzarla in NodeJS. Paypal decise di formare due gruppi di sviluppatori: un gruppo formato da 4 sviluppatori per Java e un gruppo con 2 sviluppatori per NodeJS.
In sostanza due gruppi differenti (e con un numero differente di sviluppatori) si ritrovarono a sviluppare lo stesso applicativo contemporaneamente. Come andò a finire? Il gruppo con due sviluppatori porto a termine la prima versione in NodeJS in appena 2 mesi di lavoro. Il team di sviluppo Java composto da 4 persone impiegò 4 mesi. Questa è la dimostrazione che NodeJS ha reso più fluido e produttivo il flusso di lavoro dei due sviluppatori impegnati nel progetto.
NodeJS ha davvero solo lati positivi?
Trovare dei lati negativi sembra realmente difficile, ma effettivamente un piccolo aspetto negativo da non sottovalutare c’è. NodeJS sfrutta al massimo le potenzialità elaborative della macchina che lo ospita, di conseguenza fa un intenso utilizzo della CPU. Questo accade perché grazie alla sua asincronia non attende mai, non ha una sequenzialità da seguire, ma avvia processi paralleli tra loro che termineranno una volta che avranno eseguito il loro compito.