Por qué Node.js es tan malo
Node.JS es una plataforma terrible, y su terribleidad reside en un aspecto muy simple pero importante de su funcionamiento principal: las devoluciones de llamadas basadas en E/S.
Creo que ya todos lo sabemos. Es muy malo escribir código de esta manera. Me di cuenta de esto hace un tiempo y después de usar Go durante algunas semanas, me enamoré. Go también es menos "mágico" que Python, lo que hace que el código sea más limpio.
La claridad de Go hace que el código fuente sea más fácil de leer.
La desventaja es que Python es más rápido de desarrollar y Go es más fácil de mantener.
Pero cuando piensas en estos problemas desde la perspectiva de Node.JS, no obtienes facilidad de mantenimiento de tu código, no obtienes tranquilidad, solo obtienes velocidad. Pero lo que intento decir es: ¿realmente estás ganando velocidad? Porque durante este período se pierde tanto la conveniencia del desarrollo como la conveniencia del mantenimiento.
Pasé mucho tiempo aprendiendo Node.JS e intentando hacer algo, pero no funcionaba y no sabía realmente por dónde empezar.
Normalmente, evalúo una tecnología en función de algunas de sus propias características. ¿Es fácil de usar? ¿Puede ayudarme a mejorar
la eficiencia? ¿Está completa la documentación? ¿Existe algún recurso de ayuda? Aparentemente, Node.JS no pasa la prueba anterior. Si bien la referencia API siempre ha sido texto
, vi a algunas personas en HN (Hacker News) decir lo bueno que es Node.JS. En ese momento pensé que estas personas eran inteligentes y que Node.JS debería ser una buena plataforma. Desafortunadamente, pasé algunos meses trabajando en ello y finalmente descubrí que era una plataforma realmente mala. No podía escribir ningún código que fuera cómodo de leer (y ciertamente incómodo de escribir).
¡Comencé a dudar de mis habilidades de programación!
Por supuesto, algunos lectores pueden decir: usamos Node.JS en producción, así que esta es su incompetencia.
O bueno, admito que podría estar en algún tipo de problema. Pero la compensación a la que me refiero sigue siendo válida: para lograr la escalabilidad prometida, hay que sacrificar la legibilidad y la capacidad de escritura del código. Y en Python, puedes ampliarlo muy fácilmente. Puede utilizar gevent
, que es un marco de concurrencia basado en biblioteca/servidor web. Esto significa que el bloqueo de IO ya no será un problema, el único problema restante es el intérprete de Python, que también se puede resolver mediante el equilibrio de carga distribuido de múltiples servidores.
Ahora, sólo hay una cosa que Node.js puede hacer y Python no puede hacer, y es
websockets. En realidad, no estoy seguro de si Python realmente no puede hacerlo; después de buscar en Google, tal vez encuentre alguna solución. Por supuesto
Go puede implementar websockets fácilmente (obtenga code.google.com/p/go.net/websocket)
Incluso si cree que los websockets son la razón por la que usa Node. js, creo que todavía tienes la opción de usar Node.js para implementar websockets y Python para hacer el resto. Aquí tienes un ejemplo
. Sí, el diseño arquitectónico (que une Python y Node.js) puede ser un poco complejo, pero sigue siendo mucho mejor que desarrollar un programa web completo usando Node.js.