javascript - guide - Diferencias entre node.js y Tornado
npm (5)
Como señala Rich Bradshaw, 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 alguna base de código. Para mí, ese es un gran beneficio potencial de Node.js. Nodo también viene con más bibliotecas asíncronas listas para usar.
V8 debería hacer que JS sea más rápido que Python, al menos eso es lo que los benchmarks parecen sugerir , pero puede no importar mucho, porque tanto Node.js como Tornado (y la mayoría de los otros frameworks web para el caso) usan wrappers para bibliotecas nativas. Gran parte de la biblioteca estándar de Python está escrita en C o puede ser reemplazada por una alternativa más rápida, lo que mitiga aún más las diferencias de potencial.
Los servicios web suelen estar vinculados a E / S, por lo que estamos pasando 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.
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 asíncronos que no bloquean, ¿verdad? ¿Por qué elegir uno sobre el otro además del idioma?
La principal ventaja de node.js es que todas sus bibliotecas son asíncronas, por lo que no tiene que preocuparse demasiado por el bloqueo. Hay bibliotecas asíncronas para mysql, postgres, redis, etc. Todo es asíncrono por defecto.
Python tiene una biblioteca para todo, pero la mayoría de estas bibliotecas no son asíncronas. Para aprovechar el tornado (y no para bloquear el proceso) se necesitan bibliotecas especiales (p. Ej., No se puede simplemente ''pip install redis'' y usarlo, necesitará algo como brukva ), y hay mucho menos tornado libraries que las bibliotecas node.js. No hay un controlador tornado async mysql disponible en este momento, por ejemplo (o al menos no lo conozco).
Pero aún puede usar muchas bibliotecas de Python con tornado (las que no lo hacen con E / S) y la comunidad de tornado está aumentando y completando las brechas.
Es más fácil escribir una aplicación usando node.js que usar tornado en mi experiencia. Personalmente cambié a tornado de node.js porque encaja mejor en la infraestructura existente de mi proyecto python (la integración entre el sitio django que sirve páginas html y el servidor tornado que proporciona funciones en tiempo real fue bastante sencilla).
Le sugiero que vaya con NodeJS, si no hay preferencia personal a Python. Me gusta mucho Python, pero para Async elijo Tornado sobre nodo, y más tarde tuve que luchar para encontrar la manera de hacer algo, o bibliotecas con soporte asíncrono (como Cassandra tiene asincronía en las pruebas, pero en ninguna parte podría encontrar la manera de usar cqlengine con async. Tuve que elegir a Mongo porque ya superé la fecha límite). En términos de rendimiento y asincronía, el nodo es mucho mejor que el tornado.
Nodejs también tiene una integración / implementación perfecta de websockets llamada Socket.io. Maneja navegadores compatibles con sockets - events 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.
node.js usa V8 que compila en código ensamblador, tornado aún no lo hace.
Aparte de eso (que en realidad no parece hacer mucha diferencia a la velocidad), es el ecosistema. ¿Prefiere el modelo de evento de JS, o la forma en que funciona Python? ¿Estás más feliz usando las bibliotecas Python o JS?