5 alternativas a Node.js, ¿y tiene sentido?





Node.js no es un producto perfecto, tiene inconvenientes (¿usar JS?), Algunos de ellos se arrastraron desde una etapa temprana de desarrollo debido a decisiones erróneas tomadas por Ryan Dahl, que fueron recordadas brevemente en el artículo ¿Cómo fue node.js se frustra . Como suele ocurrir, en algunos casos es difícil o imposible encontrar una alternativa a este sistema, especialmente en el sector empresarial. Pero si no necesita admitir un gran código heredado, que proporcionará trabajo a los programadores durante muchos años, puede buscar otras soluciones. Puede leer sobre el "asesino de Node.js" en el artículo mencionado anteriormente, algunos otros se discutirán en este artículo.



ASP.NET







"Un viejo amigo es mejor que dos nuevos". ASP.NET tiene una larga historia. La tecnología Active Server Pages, que formó la base de los servicios ASP.NET, se desarrolló a finales del siglo pasado. Por supuesto, el tiempo de desarrollo no siempre es bueno, pero la larga vida útil del producto lo dice todo. Aunque ASP.NET tiene un principio de funcionamiento completamente diferente, no es solo un entorno para ejecutar código de programa y conectar módulos, es una plataforma para crear servicios web; a menudo se usa para resolver problemas similares a Node.js.



Si Node.js es una creación de un equipo pequeño y en su forma más básica es un entorno para lanzar programas JS fuera del navegador con acceso a E / S, entonces ASP.NET es un producto típico de una gran corporación. Inicialmente contiene una gran cantidad de bibliotecas predeterminadas que le permiten comenzar a desarrollar de inmediato. Node se desarrolla gracias a la comunidad de desarrolladores, por lo que el sistema primero debe estar equipado con todos los módulos necesarios, que son simplemente increíbles. El más simple "¡Hola mundo!" on Node arrastrará varios miles de archivos al sistema. Además, la cantidad no siempre se convierte en calidad, a veces parece que los desarrolladores incluso están listos para meter "i ++" en un módulo separado, que luego se descargará un millón de veces, y una actualización o eliminación repentina de este paquete. causará serios problemas de compatibilidad o bloqueará npm.En ASP, la seguridad y las actualizaciones son monitoreadas por el ecosistema de Microsoft, las bibliotecas escritas por él y otras grandes empresas se revisan cuidadosamente para detectar errores y problemas de compatibilidad ...



A pesar de muchas diferencias, una de las principales es un enfoque diferente para la distribución de cálculos. En Node.js, todo se hizo en un solo hilo, pero usando E / S asincrónicas. ASP trabajó originalmente en E / S síncronas y multiproceso. La primera opción muestra un gran rendimiento cuando los servicios requieren un intercambio muy intensivo, pero a costa de alguna complicación del código. En las últimas versiones de los productos, estas diferencias se solucionan, en Node.js y ASP.NET, se usa el patrón async \ await.



JS ha crecido mucho durante su desarrollo, pero sigue siendo un lenguaje sin tipado fuerte y pierde frente a C #, que se desarrolló originalmente bajo la influencia directa de C ++, que desde los primeros días tenía un tipado fuerte y OOP. La consecuencia de esto es que C # es más poderoso y más consistente, y no requiere complementos como TS. Pero, por otro lado, JS, debido a su simplicidad, tiene más demanda cuando se programan microservicios, que no requieren capacidades complejas de C #.



Además de las diferencias en los lenguajes de programación utilizados, estas plataformas tienen diferentes ideologías. En ASP.NET, mucho está predefinido, ofrece todo listo, comenzando con la estructura de archivos, mientras se comienza a trabajar con Node.js, debe elegir todo usted mismo, lo que da mucha flexibilidad, pero complica el desarrollo. Pero ASP.NET tiene potentes herramientas de depuración, prueba y refactorización.



Lo único que ASP.NET es seriamente inferior a Node.js es la facilidad de implementación. El nodo solo necesita un motor y un proxy o Docker. La plataforma puede ser configurada por usted mismo o puede tomar una imagen VPS lista para usar, que está disponible en casi cualquier proveedor de alojamiento. Para ASP, a pesar de la multiplataforma, no todo es tan fácil, y las imágenes listas para usar para servidores están disponibles solo para los jugadores más grandes del nivel de Azure.



¿Es realmente necesario JavaScript?



Node.js se creó como un tiempo de ejecución para JS porque es un lenguaje de programación simple y accesible que puede implementar fácilmente múltiples scripts simultáneos para la comunicación bidireccional de aplicaciones web entre un navegador y un servidor. ASP.NET también fue creado para escribir aplicaciones web, solo usando otros métodos. El mismo Deno consta de varias capas por encima de la máquina virtual, que trabaja directamente con los recursos del servidor. Pero no es necesario utilizar envoltorios complejos de lenguajes de programación que no se ejecutan directamente en el servidor y requieren máquinas virtuales.



Vamos







En 2007, los ingenieros de la empresa decidieron que C ++ no cumplía con las realidades actuales de la tecnología informática. Se requerían herramientas de paralelización eficientes, aprovechando las capacidades de los procesadores multinúcleo y los sistemas distribuidos, un recolector de basura automático y algunas simplificaciones fueron necesarias para una mejor legibilidad del código y facilidad para trabajar con tipos.



El objetivo de los desarrolladores no era crear una "mejor versión de C ++", sino hacer que el nuevo lenguaje fuera más comprensible en función de su experiencia en programación. Go se anunció públicamente en 2009 y rápidamente ascendió a casi los 10 principales lenguajes de programación (el puesto 13 a principios de 2012). El mismo Raymond Dahl lo elogió con expresiones como: "¿Por qué Node.js, si hay un lenguaje tan hermoso como Go?". Pero la novedad pasó y el lenguaje fue casi olvidado hasta que resultó que sus herramientas de paralelización eran adecuadas para desarrollar microservicios en aplicaciones web. Esto devolvió el idioma a su antigua popularidad.



Se han escrito varios frameworks web para Go, aunque no es necesario utilizarlos, ya que de fábrica tiene toda la funcionalidad necesaria para programar aplicaciones web. Deno se escribió originalmente en Go.



Rubí







Comparado con el mismo Go, este no es el idioma más nuevo, fue lanzado en 1995. A diferencia de Go, fue desarrollado por un entusiasta solitario, Yukihiro Matsumoto, que estaba ansioso por crear un lenguaje interpretado orientado a objetos que fuera mejor que Pyton. El idioma no ganó popularidad de inmediato, sobre todo porque durante los primeros años su documentación estaba solo en japonés. Los libros en inglés no se publicaron hasta principios de la década de 2000, y el reconocimiento llegó con el lanzamiento del marco web Ruby on Rails en 2005, que rápidamente se hizo popular, especialmente cuando Apple anunció en 2007 que se distribuiría con Mac OS X 10.5 ... .



Al igual que con todos los lenguajes interpretados, la velocidad de Ruby fue relativamente lenta, lo que afectó en gran medida el rendimiento de las aplicaciones web escritas en Ruby on Rails. Conociendo este problema, el autor comenzó a desarrollar una versión del lenguaje que perdería la compatibilidad con versiones anteriores, pero que se ejecutaría mucho más rápido, lo que hizo en 2009. La velocidad ha aumentado significativamente y es igual a las aplicaciones web que se ejecutan bajo .NET y JVM. Gracias a esto, la popularidad del marco se ha disparado. En 2018, el autor de Ruby lanzó la versión 2.6, que implementa la compilación dinámica, lo que acelera aún más las aplicaciones.

Hasta ahora, el lenguaje Ruby está estrechamente asociado con el marco Ruby on Rails.



Elixir







Erlang es otro lenguaje de programación creado por una gran corporación. Esta vez los suecos de Ericsson hicieron todo lo posible. En 1986, nadie pensó en desarrollar aplicaciones web, Internet todavía estaba en el proyecto y se creó el lenguaje para ejecutar sistemas en tiempo real. Erlang fue durante mucho tiempo prácticamente desconocido fuera de la empresa, que lo utilizaba para sus necesidades internas, hasta que en 1998 la dirección decidió dejar de soportar su propio lenguaje y prohibió su uso, obligando a los desarrolladores a pasarse a Java. Esto llevó a que el lenguaje se publicara bajo una licencia abierta y comenzó a distribuirse fuera de la empresa que lo desarrolló. Durante mucho tiempo, fue interesante solo para un pequeño círculo de científicos, hasta que resultó que su concepto es muy adecuado para el desarrollo de la arquitectura multiprocesador.



En 2012, José Walim, uno de los desarrolladores de Ruby on Rails, tuvo la idea de crear un lenguaje de programación para sistemas de alta carga y grandes sitios web. Como resultado, se desarrolló Elixir , un lenguaje de programación funcional compilado en código de bytes para la máquina virtual Erlang (BEAM). Debido al hecho de que el lenguaje se basa en Erlang, que fue desarrollado para programar equipos de comunicación, Elixir recibió propiedades únicas: tolerancia a fallas, reemplazo de código caliente(cambiar o deshacer el código de un programa en ejecución, sin reiniciarlo) y la capacidad de trabajar en tiempo real. Estas propiedades le permiten crear sistemas confiables de alta carga que admiten escalado horizontal y vertical, operando de 5 a 10 veces más rápido que aplicaciones similares escritas en lenguajes interpretados (PHP, Ruby, Python). El lugar de trabajo del creador influyó en el hecho de que el lenguaje usa una sintaxis similar a Ruby, y es fácil de aprender para quienes usan Ruby on Rails.



Elixir es utilizado actualmente por empresas conocidas como Discord, Square Enix, PepsiCo y Sketch.



¿Y si, después de todo, JavaScript?



Pero si no es práctico dominar un nuevo lenguaje de programación, ¿cómo arrastrar todo el Nodo al servidor? Puede ver otros tiempos de ejecución de JS.







RingoJS es una plataforma multiproceso construida en JVM y optimizada para ejecutarse en servidores. Para interpretar el código JS, se utiliza el motor Mozilla Rhino, que tiene una historia impresionante. Comenzó a desarrollarse en 1997, allá por la época de Netscape, posteriormente el proyecto fue transferido a la Fundación Mozilla y publicado en código abierto.



Las aplicaciones de RingoJS se pueden implementar en cualquier plataforma Linux, hasta Raspberry Pi o sobre plataformas en la nube como Google App Engine. RingoJS es un sistema modular basado en CommonJS, incluso puedes usar algunos módulos de Node.js. Además, el motor Ringo le permite integrar bibliotecas escritas en Java.







PurpleJS es otro marco JS simple que se ejecuta en la JVM. Nashorn (también un rinoceronte) desarrollado por Oracle se utiliza como motor JS. Esto no quiere decir que este sea un reemplazo completo para Node, porque el marco no usa el modo asíncrono y Nashorn no tiene soporte para CommonJS, pero es muy liviano y no requiere reiniciar el servicio después de cambiar el código.







Vert.xYa no es un marco, sino un conjunto de herramientas multilingües que le permite crear aplicaciones web reactivas, microservicios y utilidades de red totalmente asincrónicas que se ejecutan en la JVM. Los lenguajes admitidos no se limitan a Java y JS, a excepción de ellos, puede escribir aplicaciones en Groovy, Ruby, Scala y Kotlin, se admite un sistema modular con un repositorio centralizado, Vert.x es fácilmente expandible y escalable.



Es curioso que el proyecto se llamara primero Node.x, luego se le cambió el nombre para evitar problemas legales, porque los objetivos al crear eran los mismos que los de Node.js, y Tim Fox (creador de Vert.x) dijo que era inspirado por el éxito de Dali y "Quería hacer Node.js en JVM".



Si las alternativas no son impresionantes y node.js sigue siendo su amor





node.js






All Articles