Mi comprensión de la tecnología es que se compila sobre la marcha en el montaje. En el espectro de velocidad, es más lento que Java pero más rápido que Ruby y Python. En el lado del cliente, un intérprete tiene sentido, pero en el lado del servidor mi primer pensamiento es que la compilación antes de ejecutar, o al menos tener la opción de hacerlo, es una arquitectura óptima. Si el JavaScript se pre compiló de esta manera, ¿se ejecutaría más rápido que Java? ¿O tiene algo que ver con los lenguajes débilmente tipados, lo que significa que JavaScript siempre será más lento que Java?¿Por qué no se compila Node.js antes del tiempo de ejecución?
Respuesta
Parte de Node.js es C++ y está precompilada. Sin embargo, tengo entendido que hubo un esfuerzo por mantener todo lo posible en Javascript, pero donde el rendimiento era pobre, entonces se usaba C++.
Node.js no sería posible sin el V8 JavaScript Engine, que es lo que compila el javascript. Este motor es conocido por ser extremadamente rápido. Fue creado para el navegador Chrome, pero el rendimiento también tiene su recompensa en Node.js.
En cuanto al rendimiento de Node.js, como servidor web es al menos a la par de los otros servidores web líderes como Apache + PHP. Entonces, el rendimiento no es un problema en el caso de uso común. Dicho esto, hay tecnologías más rápidas. Los servidores basados en Erlang son conocidos por ser más rápidos bajo cargas concurrentes (curiosamente, Erlang también es un lenguaje tipado dinámicamente).
Para realizar tareas intensas de CPU/gpu con crujido de números, Node.js no es una buena opción, a menos que lo atempere con Fabric Engine, en cuyo caso puede estar a la par con C++.
Hay un par de proyectos que actualmente están explorando los problemas de velocidad con JavaScript:
- Dart - http://www.dartlang.org/support/faq.html. (No se trata solo de velocidad, sino que es parte de eso).
- Nodo Nativo - https://github.com/d5/node.native/
- 1. ¿Por qué/cómo se compila?
- 2. ¿Por qué compila esto?
- 3. ¿Por qué compila erlang: foo()?
- 4. ¿Por qué no se compila este código de plantilla C++?
- 5. ¿Por qué Node.js se llama Node.js?
- 6. ¿Por qué no compila {$ ifopt FINITEFLOAT ON}?
- 7. ¿Por qué este código C# no se compila?
- 8. ¿Por qué vector.push_back (auto_ptr) no compila?
- 9. ¿Por qué este código no se compila en g ++
- 10. ¿Por qué ptr_fun (tolower) no se compila en mingw?
- 11. Error del compilador C#? ¿Por qué no se compila esta conversión implícita definida por el usuario?
- 12. ¿Por qué compila?
- 13. ¿Por qué no se compila la referencia de los argumentos de referencia del objeto al hilo?
- 14. ¿Por qué no se reifican los parámetros de tipo genérico de Java en tiempo de ejecución?
- 15. ¿Por qué int main() {} compila?
- 16. ¿Por qué no se debe modificar la configuración de django en el tiempo de ejecución?
- 17. ¿Por qué no se borran todos los tipos de información en Java en tiempo de ejecución?
- 18. ¿Por qué esta declaración del mapa en Perl no se compila?
- 19. Eclipse no compila secuencias de comandos Groovy en clases Java en tiempo de ejecución
- 20. Configuración de Hibernate para utilizar la base de datos, cuyo nombre no se conoce antes del tiempo de ejecución
- 21. ¿Por qué Perl no compila en archivos binarios como python?
- 22. ¿Por qué no se compila este código C# cuando se usan parámetros con nombre?
- 23. ¿Por qué NumberFormatException es el tiempo de ejecución?
- 24. ¿Por qué esperar tiempo SIFS antes de enviar ACK?
- 25. Tiempo de ejecución del programa
- 26. ¿Por qué mi programa de división de C++ no compila
- 27. ¿Por qué JVM no compila todo el programa por adelantado, en lugar de compilarlo pieza por pieza?
- 28. La ejecución del programa no es secuencial. ¿Por qué?
- 29. java.lang.Object o = 1; // ¿por qué compila esto?
- 30. ¿Por qué este programa C se compila sin un error?
esto va a responder a su pregunta: http://java.dzone.com/articles/what-javascript-equivalent – alfasin
intérpretes modernos de JavaScript no es realmente intérpretes, pero los compiladores de adaptación. Pero los lenguajes dinámicos generalmente son más lentos de ejecutar (debido a la verificación de tipos) que los lenguajes estáticos, por lo que probablemente no sea tan rápido como Java. –
Tener tipado estático (o "tipado fuerte" si te hace sentir bien) es un factor que da a algunos idiomas una mejora en el rendimiento, pero está lejos del único factor. Lo que estoy diciendo es que no necesariamente se puede traducir el rendimiento en puntos de referencia específicos en una opción de tecnología de alto nivel. Por ejemplo, uso regularmente Grails (JVM) y Express (node.js). Tendría suerte si Grails comienza en menos de 10 segundos, pero Express, que me ofrece una funcionalidad comparable, comienza en milisegundos. –