La mia comprensione della tecnologia è che è compilato al volo in assemblea. Nello spettro di velocità è più lento di Java ma più veloce di Ruby e Python. Sul lato client un interprete ha senso, ma sul lato server il mio primo pensiero è che la compilazione prima dell'esecuzione, o almeno la possibilità di farlo, è un'architettura ottimale. Se il codice JavaScript fosse precompilato in questo modo, sarebbe più veloce di Java? O ha qualcosa a che fare con linguaggi debolmente tipizzati, il che significa che JavaScript sarà sempre più lento di Java?Perché non è stato compilato Node.js prima del runtime?
risposta
Alcuni di Node.js sono C++ ed è precompilato. La mia comprensione però è che c'è stato uno sforzo per mantenerne il più possibile in Javascript, ma dove le prestazioni erano scadenti, veniva usato il C++.
Node.js non sarebbe possibile senza il V8 JavaScript Engine, che è ciò che compila il javascript. Questo motore è noto per essere estremamente veloce. È stato creato per il browser Chrome, ma anche le prestazioni si ripagano in Node.js.
Per quanto riguarda le prestazioni di Node.js, come server Web è almeno alla pari degli altri server Web principali come Apache + PHP. Quindi le prestazioni non sono un problema nel caso di uso comune. Detto questo, ci sono tecnologie più veloci. I server basati su Erlang sono noti per essere più veloci sotto carichi concorrenti (interessante, Erlang è anche un linguaggio tipizzato dinamicamente).
Per le attività intensive di cpu/gpu di numero puro, Node.js non è una buona scelta, a meno che non venga temperato con Fabric Engine, nel qual caso può essere alla pari con C++.
ci sono un paio di progetti che sono attualmente esplorando problemi di velocità con JavaScript:
- Dart - http://www.dartlang.org/support/faq.html. (Non riguarda solo la velocità ma è parte di esso).
- Nodo Native - https://github.com/d5/node.native/
- 1. Perché questo codice è stato compilato?
- 2. Perché _mm256_load_pd è stato compilato in MOVUPD invece di MOVAPD?
- 3. WebStorm "Avviso: il file non è stato compilato perché non c'è un riferimento da tsconfig.json"
- 4. Perché il codice JIT della cache JIT non è compilato?
- 5. Perché questo codice C# non viene compilato?
- 6. Perché {$ ifopt FINITEFLOAT ON} non viene compilato?
- 7. Come rilevare se un programma è stato compilato usando -threaded?
- 8. I tipi vengono cancellati prima del runtime
- 9. Perché XAML è compilato in BAML e non in C#
- 10. Perché Node.js è scalabile?
- 11. Perché IndexedDB non è disponibile in node.js?
- 12. Perché NumberFormatException è di runtime?
- 13. Prestazioni del codice compilato dal compilatore compilato
- 14. Perché non tutto il codice è compilato in posizione indipendente?
- 15. Perché il software Java non è compilato in modo nativo?
- 16. Perché non è stato possibile modificare la variabile long_query_time durante il runtime
- 17. Perché questo enum viene compilato?
- 18. Perché non questo NSAssert con stringWithFormat è compilato?
- 19. Perché non riesco ad installare il mio servizio (runtime più recente del runtime caricato)?
- 20. Perché ViewForAnnotation non è stato chiamato?
- 21. Task non è riuscita perché Al.exe non è stato trovato,
- 22. Il reindirizzamento prima del caricamento POST è stato completato
- 23. Perché "ELSE:" è compilato in vb.net?
- 24. Perché questo non dovrebbe essere compilato?
- 25. Perché getservletcontext non è stato trovato?
- 26. Perché JUnit TemporaryFolder non è stato eliminato?
- 27. Perché il codice non viene compilato?
- 28. Perché questo programma equivalente non viene compilato?
- 29. Perché vector.push_back (auto_ptr) non verrebbe compilato?
- 30. Perché le guide richiedono JavaScript Runtime?
questo sarà rispondere alla tua domanda: http://java.dzone.com/articles/what-javascript-equivalent – alfasin
moderni interpreti JavaScript non è realmente interpreti ma compilatori adattivi. Ma i linguaggi dinamici di solito sono più lenti da eseguire (a causa del controllo dei tipi) rispetto ai linguaggi statici, quindi probabilmente non sarà veloce quanto Java. –
Avere una digitazione statica (o una "tipizzazione forte" se ti fa sentire bene) è un fattore che dà a alcune lingue un miglioramento delle prestazioni, ma è ben lungi dall'essere l'unico fattore. Quello che sto dicendo è che non è possibile tradurre necessariamente le prestazioni in specifici benchmark in una scelta tecnologica di alto livello. Ad esempio, uso regolarmente Grails (JVM) e Express (node.js). Sarei fortunato se Grails inizia tra meno di 10 secondi, ma Express, che mi offre funzionalità comparabili, inizia in millisecondi. –