In Node.js, i costrutti non bloccanti sono solitamente preferibili a quelli bloccanti?

0

La seguente è una dichiarazione delle migliori pratiche in Node.js per quanto riguarda le applicazioni web? In caso contrario, come potrebbe essere migliorato?

L'istruzione

Il ciclo di vita di qualsiasi app web ha almeno due fasi: una fase di configurazione e una fase pronta (quando l'applicazione è pronta a rispondere alle richieste.)

Nella fase pronta,

  1. Le operazioni IO (accesso al disco, chiamate al database, ecc.) dovrebbero sempre essere asincrone / non bloccanti.

  2. Anche le operazioni che si verificano esclusivamente in memoria dovrebbero essere asincrone, quando possibile. Questo è particolarmente vero quando le operazioni coinvolgono l'iterazione e specialmente ^ 2 true quando il limite superiore del numero di iterazioni è sconosciuto.

  3. Le operazioni sincrone / di blocco non devono mai essere eseguite in risposta a una richiesta.

A mio parere, la questione se un elemento sia parte delle migliori pratiche per lo sviluppo in un determinato linguaggio di programmazione può essere risolta in modo decisivo sulla base dell'esperienza e dei criteri oggettivi.

    
posta Terrence 02.09.2014 - 17:00
fonte

2 risposte

3

La risposta come qualcuno che ha scritto una quantità significativa di codice node.js a livello professionale è sì. Come un'implementazione di JavaScript non vi è alcuna nozione di thread in Node.js. Tutte le operazioni IO sono quindi asincrone. Sebbene molte delle API di livello inferiore del nodo comune forniscano una variante xxxSync che le utilizza non è preferibile e può causare notevoli problemi di prestazioni, anche in condizioni di carico e di sviluppo molto basse.

Riguardo al tuo commento riguardo alle operazioni di memoria. Nessuna operazione in memoria è veramente asincrona. Mentre è comune riutilizzare il pattern di callback quando si implementano funzioni long-life, questa è più una convenzione che altro. Affinché una funzione sia asincrona, deve rilasciare la sua attesa sul processore. Nei linguaggi standard un blocco di chiamata di sistema, nel senso che sebbene il processo non sia più responsabile del processore e il processo stesso sia in stato di attesa, non è possibile eseguire altre parti dello stesso programma. Nei callback asincroni del nodo eseguire la stessa operazione che i thread eseguono nella maggior parte delle lingue consentendo al programma di continuare sebbene una delle sue operazioni sia in stato di attesa.

Per farla breve, usa sempre asincrono quando possibile, ma capisci la differenza tra l'uso del pattern di callback e l'uso di un'operazione asincrona mentre sono spesso identici nel codice e sono drasticamente differenti. Misunderstanding la differenza può causare alcuni grattacapi reali per le persone nuove alla lingua.

    
risposta data 02.09.2014 - 18:27
fonte
0

Rispondo non per esperienza, ma a causa di ciò che ho letto molto tempo nei blog degli sviluppatori competenti di node js: Sì, queste sono buone regole poiché sembra che tutti coloro che hanno superato il test delle prestazioni concordino sul fatto che le chiamate di blocco sono la causa principale di calo delle prestazioni.

C'è un esempio ma ho letto almeno dodici sono d'accordo quando si cercano informazioni sul nodo js.

    
risposta data 02.09.2014 - 17:55
fonte

Leggi altre domande sui tag