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.
- ¿ProofHub es la mejor alternativa de Basecamp?
- ¿Cuáles son las ventajas y desventajas de usar Sinatra vs Express para un servicio web API?
- ¿Qué necesito aprender para crear un sitio de reserva de restaurante simple como toptable?
- ¿Cuál es la forma de encontrar la base de datos utilizada en la aplicación web?
- ¿Cuál es la mejor herramienta para crear formularios en línea que puedo alojar internamente?
¿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.