¿Cómo se compara Node.js contra Tornado?

Para un punto de referencia no científico, consulte http://www.slideshare.net/amix3k… (Sllide 20), la prueba significa que son comparables en escalabilidad. Node.js es probablemente más rápido porque:

  • Node.js usa V8, que traduce JS en código de máquina. Tornado no hará eso por un año (hasta que salga Python-3.3).
  • Node.js dedicó menos tiempo a las acciones a nivel de servidor (consulte la cantidad de datos transferidos: Tornado envió más de 2 veces más datos. Vs cantidad de HTML transferido, casi lo mismo). Tornado produjo muchos encabezados HTTP adicionales, y pasó tiempo cocinándolos.

Por lo tanto, debe comprender que la diferencia sustancial está en:

  • Lenguajes de programación y su ecosistema de apoyo,
  • Disponibilidad de desarrolladores
  • Nivel de mantenimiento del servidor en sí y tecnologías empleadas
  • Disponibilidad de bibliotecas listas para usar, etc.

Todo eso cuenta cuando vas a elegir uno u otro.

Esta es una prueba totalmente no científica que utiliza una aplicación muy simple “hello world” que se ejecuta en un solo proceso, pero da una idea sobre el rendimiento bruto:

Node.js, 0.6.8: ~ 11000 req / s
Tornado 2.2, PyPy 1.8: ~ 8000 req / s (después del calentamiento)
Tornado 2.2, CPython 2.7: ~ 3500 requisitos / s

Probado con “httperf –num-conns = 1000 –num-calls = 10” en el iMac moderno. Entonces, mientras Node.js lidera el paquete, Tornado no se queda atrás cuando se ejecuta en PyPy.

Por supuesto, el rendimiento es solo un factor. Hay mucho más en el juego.

Si bien ambos proyectos contienen un servidor HTTP y utilidades, Node.js es más una plataforma de bajo nivel ( la plataforma del lado del servidor JS) que generalmente se usa con marcos adicionales (Connect, Express, etc.), mientras que Tornado tiene la mayoría cosas de marco de nivel incorporadas.

Personalmente, veo la ventaja absolutamente más grande (y quizás aún subestimada) de Node.js, ya que comparte el idioma y el código entre el cliente y el servidor (¡piense en aplicaciones de una sola página y modelos compartidos / validación!). Hay varios proyectos aspirantes construidos sobre esa idea; por ejemplo, Batman.js, Derby.js y Tower.js.

Apuesto a que lo mencionado será un cambio de paradigma importante en el futuro cercano, ya que el ecosistema Node.js es el único jugador en esa ciudad por razones obvias, a menos que los navegadores de repente decidan incluir los tiempos de ejecución de Python / Ruby / Dart.
Gracias a CoffeeScript, el código JS ya no daña los ojos de los codificadores Python / Ruby, eliminando una barrera más. En desarrollo web, no me sorprendería si Node.js hiciera lo mismo con Ruby / Python que PHP hizo con Perl.

Nodejs no es un marco web y tornado no es un lenguaje de programación “. – Ravi

Por lo tanto, es probable que desee una combinación de diferentes características de comparación.
Comparado en términos de rendimiento , sin duda, nodejs es mucho mejor con razón obvia, motor V8. CPython y Pypy, ambos se retrasan desde nodejs cuando se trata de rendimiento puro.
Desde la perspectiva de la programación , Python es más maduro que Javascript. Por ejemplo, la necesidad básica de Clase y módulos surge cada vez que comienza a escribir código con más de 2-3 archivos. Python tiene clase completa, paquetes de soporte junto con muchos otros, mientras que en JS, parece parcheado con require / commonjs y creando clases con funciones (parece que el sacerdote Perl está bendiciendo nuevamente). Pero con ECMAScript evolucionado y refactorizado cada vez más en estos días, esto no sería un problema después de unos años .
La disponibilidad de bibliotecas para ambas plataformas también difiere. Python tiene una gran lista de bibliotecas, y muchas para el mismo propósito con un pequeño giro (eso también sucede con la comunidad de nodejs, pero aún no tanto, probablemente lo será en el futuro).

Legibilidad / Mantenibilidad: Tornado solía ser feo con el tipo de programación de devolución de llamada, ahora su rama 4.x está mejorando con el módulo gen. Esto significa que el flujo lógico ahora sería claro como la programación síncrona. La devolución de llamada, como la programación, es altamente ilegible y no se puede mantener, lo que puede ver con los códigos jQuery. Lo mismo sucede con muchas bibliotecas de NodeJs, hasta que admiten Promise like thing o evolucionan a Go like response, err = func () syntax. Esto hace que el desarrollo basado en nodejs sea demasiado feo demasiado pronto y demasiado rápido. Por lo tanto, elegir los marcos de nodo correctos y su enfoque es importante. Tornado acaba de salir de este infierno.

Bibliotecas: Tornado se trata de asíncrono, usarlo para WSGI sería una decisión incorrecta, en lugar de optar por Pyramid o Django. Pero si elige Tornado para su aplicación, y necesita muchas bibliotecas para su proyecto, sería una mala decisión. Más del 95% de las bibliotecas de Python no se preocupan por el soporte asíncrono, porque la cultura Python no fomentó el desarrollo de tipo asíncrono (dejando de lado Twisted). En NodeJS, casi todas las bibliotecas son asíncronas, porque su lema principal es asíncrono, ejecución de un solo hilo, integrado en el núcleo. Python acaba de comenzar a hornearlo en su núcleo y carece de bibliotecas para soportarlo.

Una última sugerencia que me gustaría agregar. El rendimiento del intérprete / VM no debe ser el criterio principal para optar por una plataforma, hasta que escriba mucho algo / lógica en el código. Por ejemplo, si su aplicación está sirviendo una página, para solicitudes individuales, debe responder a 10 consultas en DB con una respuesta promedio de 15 ms por consulta. Verá que se gastan 150 ms en consultar fuentes de datos externas (DB / Cache / Indexers) mientras que se gastan solo 2-3 ms en su propio código. Cuánta diferencia hará si opta por escribir el mismo código en C / C ++ de alto rendimiento que se ejecutará en 0,5 ms (menos del 1% de optimización).