Mi empresa actual utiliza Node.js, provengo de una Licenciatura en Ingeniería de Software / Ciencias de la Computación.
Node.js está construido desde cero para vencer a la competencia en solicitudes asíncronas.
La mejor manera de pensar en el compilador es como un ‘ciclo’ de C ++, eliminando la complejidad y eso es lo que es.
Envía una solicitud, va al bucle while donde se procesa, el sistema comienza a realizar la solicitud y el bucle while puede tomar muchas otras solicitudes mientras el sistema operativo está calculando la función de devolución de llamada. Cuando se completa la solicitud, el compilador devuelve la respuesta o un error si la respuesta no se pudo calcular.
Ahora … para dar un paso atrás y observar, el sistema tiene sentido para un proyecto que requiere una cantidad desproporcionada de entradas, en comparación con el procesador del sistema. Piense en acuerdos cliente / servidor con una gran cantidad de clientes. Si el sistema no se obstruye con cada solicitud, puede realizar múltiples tareas al realizar varias solicitudes asíncronas a la vez.
Dicho esto, ¿por qué es tan odiado?
- Es un lenguaje desordenado con múltiples formas de golpear el clavo. Desde una perspectiva de backend, históricamente, los desarrolladores de backend han ‘hackeado juntos’ a través de un desbordamiento de pila. Hay varias formas de realizar una acción que reduce la claridad de los idiomas.
- Para las tareas que requieren programación de procedimientos (la modificación de la E / S de texto para nombrar uno) es completamente absurdo ya que las devoluciones de llamada regresan en un orden desconocido y luego se deben reorganizar. La alternativa es colocar toda la función de procedimiento dentro de un único soporte de devolución de llamada que es complicado y restringe el desacoplamiento natural de las etapas en una tarea de procedimiento.
- Demasiados soportes y funciones dentro de las funciones que disminuyen la claridad. Las piezas de información se deben desacoplar para que se puedan leer de forma natural; esto, junto con los corchetes un tanto excesivos, se convierte en una tarea difícil de procesar sin al menos un año de experiencia en node.js.
- Al ser de una arquitectura diferente a los niveles más bajos de abstracción, se hace difícil abstraer el rendimiento de la función por debajo del nivel de Javascript, los científicos informáticos no suelen estar locos por esta idea, ya que pueden ir a un nivel inferior para obtener resultados óptimos en situaciones específicas, y Pueden utilizar sus conocimientos.
¿Qué deberías usar en su lugar?
Bueno, eso depende de la tarea. Para programación asíncrona, javascript es ideal, una alternativa es Python Twister.
Una vez más, una alternativa para Javascript podría ser cualquier lenguaje de alto nivel que funcione según los requisitos de su sistema.
Yo diría que los idiomas de igual complejidad que son contendientes viables para aprender son Python, Ruby y PHP. Python y PHP se relacionan más con C, depende, si desea hacer más desarrollo backend y un extenso procesador de datos / captura de datos personales, Python sería más óptimo. Si te gusta hacer desarrollo web y quieres un lenguaje integrado desde el frontend al backend, entonces javascript sería tu opción ideal.