Además del hecho de que node.js está escrito en JS y Tornado en Python, ¿cuáles son algunas de las diferencias entre los dos? Ambos son servidores web asincrónicos sin bloqueo, ¿verdad? ¿Por qué elegir uno sobre el otro además del idioma?
Además del hecho de que node.js está escrito en JS y Tornado en Python, ¿cuáles son algunas de las diferencias entre los dos? Ambos son servidores web asincrónicos sin bloqueo, ¿verdad? ¿Por qué elegir uno sobre el otro además del idioma?
Respuestas:
La principal ventaja de node.js es que todas sus bibliotecas son asincrónicas, por lo que no tiene que preocuparse mucho por el bloqueo. Hay bibliotecas asíncronas para mysql, postgres, redis, etc. Todo es asíncrono por defecto.
Python tiene una biblioteca para cualquier cosa, pero la mayoría de estas bibliotecas no son asincrónicas. Para aprovechar tornado (y no bloquear el proceso) se necesitan bibliotecas especiales (por ejemplo, no puede simplemente 'pip install redis' y usarlo, necesitará algo como brukva ), y hay mucho menos bibliotecas tornado que las bibliotecas node.js. No hay ningún controlador de tornado async mysql disponible en este momento, por ejemplo (o al menos no lo sé).
Pero aún puede usar muchas bibliotecas de Python con tornado (aquellas que no hacen E / S), y la comunidad de tornado está aumentando y llenando los vacíos.
En mi experiencia, es más fácil escribir una aplicación usando node.js que usando tornado. Personalmente, cambié a tornado de node.js porque encaja mejor en la infraestructura existente de mi proyecto de Python (la integración entre el sitio de Django que sirve páginas html y el servidor Tornado que proporciona funciones en tiempo real fue bastante sencilla).
Como Rich Bradshaw señala, Node.js está escrito en JS, lo que significa que puede mantener el front-end y el back-end en el mismo idioma y posiblemente compartir algún código base. Para mí, ese es un gran beneficio potencial de Node.js . Node también viene con más bibliotecas asincrónicas listas para usar.
V8 debería hacer que JS sea más rápido que Python, al menos eso es lo que parecen sugerir los puntos de referencia , pero puede que no importe mucho, porque tanto Node.js como Tornado (y la mayoría de los otros marcos web para el caso) usan envoltorios para bibliotecas nativas. Gran parte de la biblioteca estándar de Python está escrita en C o se puede reemplazar por una alternativa más rápida, lo que mitiga aún más las posibles diferencias.
Los servicios web suelen estar vinculados a E / S, lo que significa que pasamos el tiempo esperando el almacén de datos y no procesando los datos. Eso hace que la diferencia de velocidad sintética entre JS y Python sea irrelevante en muchas aplicaciones.
node.js usa V8 que se compila en código ensamblador, tornado aún no lo hace.
Aparte de eso (que en realidad no parece hacer mucha diferencia en la velocidad), es el ecosistema. ¿Prefieres el modelo de eventos de JS o la forma en que funciona Python? ¿Está más contento con las bibliotecas Python o JS?
Nodejs también tiene una integración / implementación perfecta de websockets llamada Socket.io. Maneja navegadores compatibles con sockets - eventos y también tiene compatibilidad de sondeo hacia atrás para navegadores más antiguos. Es bastante rápido en el desarrollo que requiere un marco de notificación o alguna programación similar basada en eventos.
Te sugiero que vayas con NodeJS, si no hay una preferencia personal para Python. Me gusta mucho Python, pero para async elijo Tornado sobre el nodo, y luego tuve que luchar para encontrar la manera de hacer algo, o bibliotecas con soporte async (como Cassandra tiene async en las pruebas, pero en ninguna parte pude encontrar la forma de usar cqlengine con async. Tuve que elegir Mongo porque ya superé el plazo). En términos de rendimiento y asíncrono, Node es mucho mejor que tornado.