Indossare longjohns di amianto ...
Ieri il mio titolo con Packt Publications, Reactive Programming con JavaScript . Non è proprio un titolo centrato su Node.js; i primi capitoli hanno lo scopo di coprire la teoria, e in seguito i capitoli ricchi di codice coprono la pratica. Poiché non pensavo davvero che sarebbe stato opportuno non dare ai lettori un server web, Node.js sembrava di gran lunga la scelta più ovvia. Il caso è stato chiuso prima ancora che fosse aperto.
Avrei potuto dare una visione molto rosea della mia esperienza con Node.js. Invece sono stato onesto riguardo ai punti positivi e ai punti negativi che ho riscontrato.
Consentitemi di includere alcune citazioni rilevanti qui:
Attenzione: Node.js e il suo ecosistema sono caldi abbastanza --hot per bruciare male!
Quando ero un insegnante di matematica, uno dei suggerimenti non ovvi che mi era stato detto era di non dire a uno studente che qualcosa era "facile". La ragione era in qualche modo ovvia in retrospettiva: se dici alla gente che qualcosa è facile, qualcuno che non vede una soluzione potrebbe sentirsi (anche più) stupido, perché non solo non riescono a risolvere il problema, ma il problema sono troppo stupidi per capire è facile!
Ci sono gotcha che non solo infastidiscono le persone provenienti da Python / Django, che ricaricano immediatamente la fonte se cambi qualcosa. Con Node.js, il comportamento predefinito è che se si esegue una modifica, la versione precedente continua ad essere attiva fino alla fine dei tempi o fino a quando non si arresta e si riavvia manualmente il server. Questo comportamento inappropriato non infastidisce solo i pitonisti; inoltre irrita gli utenti nativi di Node.js che offrono varie soluzioni alternative. La domanda StackOverflow "Ricarica automatica dei file in Node.js" ha, al momento della stesura di questo documento, oltre 200 voti positivi e 19 risposte; una modifica indirizza l'utente a uno script tata, supervisore di nodi, con homepage a http://tinyurl.com/reactjs-node-supervisor. Questo problema offre ai nuovi utenti una grande opportunità di sentirsi stupidi perché pensavano di aver risolto il problema, ma il vecchio comportamento buggy è completamente invariato. Ed è facile dimenticare di far rimbalzare il server; L'ho fatto più volte. E il messaggio che vorrei dare è: “No, non sei stupido perché questo comportamento di Node.js ti ha morso la schiena; è solo che i progettisti di Node.js non hanno visto alcun motivo per fornire un comportamento appropriato qui. Prova ad affrontarlo, magari prendendo un piccolo aiuto dal supervisore dei nodi o un'altra soluzione, ma per favore non andartene sentendo di essere stupido. Non sei quello con il problema; il problema è nel comportamento predefinito di Node.js. "
Questa sezione, dopo qualche dibattito, è stata lasciata in sospeso, proprio perché non voglio dare l'impressione di "È facile". Mi sono tagliato le mani ripetutamente mentre facevo funzionare le cose, e non voglio smussare le difficoltà e farti credere che far funzionare bene Node.js e il suo ecosistema sia una cosa semplice e se non è semplice anche per te , non sai cosa stai facendo. Se non ti imbatti in difficoltà odiose usando Node.js, è meraviglioso. Se lo fai, spero che non ti allontani sentendo, "Sono stupido, ci deve essere qualcosa di sbagliato in me". Non sei stupido se provi brutte sorprese a che fare con Node.js. Non sei tu! È Node.js e il suo ecosistema!
L'Appendice, che non volevo davvero dopo il crescente crescendo negli ultimi capitoli e le conclusioni, parla di ciò che sono riuscito a trovare nell'ecosistema e ha fornito una soluzione alternativa al letterale idiota:
Un altro database che sembrava perfetto, e che può essere riscattabile, è un'implementazione lato server dell'archivio di valori-chiave HTML5. Questo approccio ha il vantaggio cardine di un'API che la maggior parte degli sviluppatori di front-end capisce abbastanza bene. Del resto, è anche un'API che la maggior parte degli sviluppatori di front-end non così bravi capisce abbastanza bene. Ma con il pacchetto node-localstorage, mentre l'accesso alla sintassi del dizionario non è offerto (si desidera utilizzare localStorage.setItem (chiave, valore) o localStorage.getItem (chiave), non localStorage [chiave]), viene implementata la semantica localStorage completa , inclusa una quota predefinita di 5 MB: PERCHÉ?Gli sviluppatori JavaScript sul lato server devono essere protetti da se stessi?
Per le capacità del database lato client, una quota di 5 MB per sito Web è davvero una quantità generosa e utile di respiro per consentire agli sviluppatori di lavorare con esso. Potresti impostare una quota molto più bassa e offrire comunque agli sviluppatori un miglioramento incommensurabile rispetto alla zoppicazione insieme alla gestione dei cookie. Un limite di 5 MB non si presta molto rapidamente all'elaborazione lato client di Big Data, ma esiste una tolleranza davvero generosa che gli sviluppatori intraprendenti possono usare per fare molto. D'altra parte, 5 MB non è una porzione particolarmente grande della maggior parte dei dischi acquistati di recente in qualsiasi momento, il che significa che se tu e un sito Web non siete d'accordo su ciò che è un uso ragionevole dello spazio su disco, o qualche sito è semplicemente noioso, non costa davvero tu e non corri il rischio di un disco rigido inondato a meno che il tuo disco rigido non sia già troppo pieno.
Tuttavia, è possibile sottolineare che quando si è l'unico codice di scrittura per il proprio server, non è necessaria alcuna protezione aggiuntiva dal rendere il database di dimensioni superiori a 5 MB tollerabili. La maggior parte degli sviluppatori non avrà bisogno né desidererà che gli strumenti agiscano da bambinaia e li proteggano dall'archiviazione di oltre 5 MB di dati lato server. E la quota di 5 MB che è un atto di bilanciamento dorato sul lato client è piuttosto sciocca su un server Node.js. (E, per un database per più utenti come descritto in questa appendice, si potrebbe sottolineare, leggermente dolorosamente, che non sono 5 MB per account utente a meno che non si crei un database separato su disco per ciascun account utente; sono 5 MB condivisi tra tutti gli account utente insieme. Ciò potrebbe ottenere dolorosose diventi virale!) La documentazione afferma che la quota è personalizzabile, ma un'email una settimana fa allo sviluppatore che chiede come modificare la quota non ha ricevuto risposta, così come la domanda StackOverflow che fa la stessa domanda. L'unica risposta che sono riuscito a trovare è nell'origine Github CoffeeScript, dove è elencato come secondo argomento intero facoltativo per un costruttore. Quindi è abbastanza facile e puoi specificare una quota uguale a una dimensione del disco o della partizione. Ma oltre a eseguire il porting di una funzionalità che non ha senso, l'autore dello strumento non è riuscito a seguire completamente una convenzione molto standard di interpretazione di 0 come significato "illimitato" per una variabile o funzione in cui un numero intero deve specificare un limite massimo per l'utilizzo di alcune risorse. La cosa migliore da fare con questa disfunzione è probabilmente specificare che la quota è Infinity:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Scambiando due commenti in ordine:
Le persone si sono inutilmente sparate ai piedi usando costantemente JavaScript nel suo insieme e parte di JavaScript reso un linguaggio rispettabile era un Douglas Crockford che diceva in sostanza: “JavaScript come linguaggio ha alcune parti davvero buone e alcune parti davvero cattive. Ecco le parti buone. Dimentica che c'è qualcos'altro. " Forse l'ecosistema Node.js caldo farà crescere il proprio "Douglas Crockford", che dirà, "L'ecosistema Node.js è un selvaggio West codificante, ma ci sono alcune vere gemme da trovare. Ecco una tabella di marcia. Ecco le aree da evitare a quasi tutti i costi. Ecco le aree con alcuni dei più ricchi paydirt che si possono trovare in QUALSIASI lingua o ambiente. "
Forse qualcun altro può prendere quelle parole come una sfida e seguire l'esempio di Crockford e scrivere "le parti buone" e / o "le parti migliori" per Node.js e il suo ecosistema. Ne comprerei una copia!
E dato il grado di entusiasmo e le ore di lavoro puro per tutti i progetti, può essere giustificato in un anno, o due, o tre, per temperare bruscamente qualsiasi osservazione su un ecosistema immaturo fatta al momento della stesura di questo scritto. In cinque anni potrebbe essere logico affermare: “L'ecosistema Node.js 2015 aveva diversi campi minati. L'ecosistema Node.js del 2020 ha molteplici paradisi. "