¿Cuáles son actualmente las mejores opciones para JavaScript del lado del servidor?

Contexto

A menudo hay una brecha entre cuál es la mejor opción general y cuál es la mejor opción para alguien. Eso es algo que creo que cualquiera debería tener en cuenta, y probablemente una de las razones por las que hay tantos lenguajes de programación diferentes y las categorías actuales de motores de bases de datos …

Y como Michael Wales acaba de mencionar, también hay algunas diferencias entre su pregunta principal, que reunirá a las personas aquí, y el resumen que proporcionó, que probablemente coincida mejor con el tipo de respuesta que necesita personalmente.

¿Cuáles son actualmente las mejores opciones para JavaScript del lado del servidor?

Esta pregunta parece esperar una lista restringida de opciones. No está claro en este momento si estamos buscando opciones centrales, ecosistemas o plataformas …

Personalmente hice presentaciones periódicas sobre este tema para que la gente entienda bien qué soluciones existen y qué tipo de solución tienen la intención de brindarle, la última edición es esta: “Estado del arte – JavaScript del lado del servidor – web-5 2012 “. Esto necesitaría una nueva actualización, pero los conceptos siguen siendo válidos.

Si se esperaba una respuesta genérica única, probablemente diría que node.js es la mejor opción como:

  • se centra solo en JS
  • es mantenido por muchos contribuyentes
  • es usado e implementado por grandes compañías
  • como un conjunto muy grande de módulos / bibliotecas proporcionados por la comunidad que cubren la mayoría de sus necesidades
  • Los servicios en la nube a menudo proporcionan módulos node.js para obtener una API JS en lugar de requerir aprender su protocolo de servicio
  • está bien adaptado para escalar replicando instancias de node.js en diferentes máquinas virtuales
  • tiene poca huella y puede aceptar muchas solicitudes entrantes
  • Tiene una comunidad muy grande de usuarios con toneladas de recursos en la Web.

Aún así, hay muchas situaciones en las que otras opciones pueden encajar mejor.
Con node.js, recibí algunos comentarios y / o experimenté donde:

  • debe escribir código solo asíncrono (a menos que lo use para proporcionar herramientas de línea de comandos)
  • debe iniciar otro proceso node.js, potencialmente en máquinas virtuales externas, cuando el núcleo único de la CPU que está utilizando comienza a agotarse, y luego administrar el intercambio de contexto con otras soluciones como Riak o Redis.
  • Como un solo código de módulo puede bloquear fácilmente una aplicación completa de node.js, para entregar aplicaciones para producción, el desarrollo basado en pruebas no solo es una práctica recomendada, sino que es casi el único camino a seguir (en mi humilde opinión), y debe tener una gran confianza en módulos de terceros que está utilizando (solo tome aquellos con un conjunto razonable de pruebas unitarias y una base de usuarios lo suficientemente grande)

Diría que si su objetivo es proporcionar un servicio altamente escalable que maneje millones de solicitudes, sin duda, hágalo. Si desea aprender buenas prácticas de desarrollo, también es un entorno muy rico para hacerlo.

Su objetivo o situación puede ser diferente:

1) puede que tenga que lidiar con un proyecto que ya está en un idioma diferente y que aún quiere beneficiarse de algunas ventajas de JavaScript del lado del servidor

Merecería la pena considerar:

  • Los motores JS propuestos por el entorno Java (Rhino o Nashorn) o para usar la plataforma SSJS que puede usar paquetes Java de forma nativa (por ejemplo: RingoJS, Dojo Persevere)
  • El motor JS propuesto por Microsoft para crear aplicaciones de Windows / Windows Phone, acceder de forma nativa a las bibliotecas .NET o escribir scripts del sistema
  • Extensiones JS propuestas para proyectos en otros lenguajes como spidermonkey o V8js para PHP, iMonkey para Objective C, johnson para ruby ​​…

2) su enfoque puede estar más en la productividad y en un código fácil de mantener basado en estándares

Vale la pena considerar:

  • CommonNode que propone una solución basada en CommonJS y Node.js
  • ArangoDB Foxx, que utiliza V8 en un entorno Java, está diseñado para proporcionar fácilmente aplicaciones web de una sola página con la ayuda del motor ArangoDB NoSQL multimodelo.
  • Wakanda se basa en la API HTML5 en el servidor con un conjunto de API compatible CommonJS y Node.js (que se puede ampliar con wakanda-node). Integra una base de datos de objetos JavaScript nativa con la API REST nativa y también propone algunas herramientas de desarrollo y un marco front-end dedicado (que todavía puede ser reemplazado por otros como Angular, Sencha, etc.)

¿Cuál es la mejor opción actual para reemplazar PHP completamente con JavaScript del lado del servidor, que puede crear y servir páginas en vivo, y hacer casi todo lo que hace PHP?

Depende de lo que haga con PHP, pero esta pregunta parece esperar una propuesta de opción única, en cuyo caso probablemente estaría tentado a decir node.js por todas las razones que mencioné anteriormente y porque el conjunto de paquetes disponible en npm es aún mayor de lo que está disponible para PHP.

Su resumen de su pregunta es completamente diferente a su pregunta original: no todos los lenguajes del lado del servidor son JavaScript, hay muchos lenguajes que no son JavaScript que cumplen / exceden el conjunto de características que proporciona PHP.

Para JavaScript, NodeJS es la única opción lógica en este momento, usar cualquier otro sería una tontería.

Si PHP es su única experiencia en términos de desarrollo del lado del servidor, recomendaría Python. Python es un lenguaje excelente, le enseñará algunos conceptos de desarrollo bastante importantes que PHP carece o implementa de manera deficiente y es el centro de trabajo del lado rentable de Internet (en comparación con PHP).

Ruby también es otra excelente opción, aunque creo que, a pesar de su capacidad, se usa con menos frecuencia para tareas de programación genéricas (además de web-dev) que Python (por lo que recomiendo esta última inicialmente).

También tienes Java, lo cual admitiré que tengo poca o ninguna experiencia. Sé que pronto estudiaré un poco aquí, es el lenguaje para Android, partes de Twitter, y es el lenguaje para todas esas “soluciones empresariales” increíblemente sobredimensionadas que dejé atrás cuando salí del DoD . He notado algunos detalles aquí y allá de que hay algunas implementaciones / desarrollos que son menos parecidos a Java, pero aún no los he investigado en absoluto.

Finalmente, tiene toda la serie de lenguajes de Microsoft Visual Studio que he evitado por completo debido al infierno empresarial y a Sharepoint.

Hay otros lenguajes relativamente más oscuros en los que también puede trabajar en el lado del servidor (Ir, por ejemplo), pero consideraría seriamente experimentar con Python por un tiempo (si mi suposición de PHP solo, actualmente, es correcta).