He usado ambos en proyectos separados y juntos. Cada uno puede hacer el trabajo, pero diferentes herramientas son para diferentes tareas y es importante darse cuenta de que un destornillador es para tornillos mientras que un martillo es para clavos.
Ventajas de node.js
- Las bibliotecas asíncronas permiten realizar operaciones simultáneas más fácilmente (muchas conexiones, escribir en el disco, llamar a apis externas, etc.)
- puede compartir recursos entre solicitudes de un solo proceso porque express está dirigido por eventos en lugar de por hilos
- Node.js puede ser más adecuado para procesos de daemon más largos porque el tiempo de ejecución es muy eficiente
- NPM es un excelente administrador de paquetes
Desventajas
- ¿Cómo llegó Pinterest a más de 10 millones de usuarios?
- ¿Cuáles son las cosas que debo aprender al probar la aplicación web usando el selenio web dirver aparte de los enlaces rotos, leyendo el archivo csv?
- En una conferencia o evento, ¿es más probable que las personas descarguen una aplicación nativa o usen una aplicación web para mejorar su experiencia en el sitio?
- ¿Cuáles son las diferentes publicaciones en desarrollo web?
- ¿Es un buen momento para entrar en el diseño y desarrollo de aplicaciones web y móviles?
- las bases de código JavaScript grandes pueden ser difíciles de mantener, pueden requerir personal más calificado para desarrollar y administrar
- Las bibliotecas comunes de NPM pueden tener normas drásticamente diferentes (diferentes bibliotecas prometedoras, implementaciones de flujo, etc.)
- Los procesos de múltiples nodos (multinúcleo) requieren un administrador de procesos como pm2, flota, etc.
- Comunidad de desarrolladores más pequeña que Ruby
- sigue siendo una plataforma relativamente inmadura
Ventajas de Sinatra
- muy fácil para los programadores novatos y Ruby es divertido de escribir. Cualquiera que pueda escribir PHP puede escribir Ruby (opinión personal)
- muchas gemas que ya resuelven la mayoría de los problemas (toneladas de motores de plantillas, ORM de bases de datos, complementos de rack, bibliotecas de autenticación, SDK, etc.)
- a partir de Ruby 2 (1.9.2) el rendimiento del tiempo de ejecución ha mejorado mucho
- gran comunidad de desarrollo (Rails tiene una comunidad más grande, pero los beneficios se transfieren a Sinatra)
Desventajas
- requiere ejecutar Unicorn, Passenger, Thin o algún otro servidor compatible con Rack roscado (no es realmente un problema, pero cada uno tiene sus propias complejidades para experimentar)
- no maneja cargas de trabajo asincrónicas tan simple como Node
- no es adecuado para demonios de larga ejecución (rendimiento impredecible con el tiempo, pero se ha mejorado)
Conclusiones
Prefiero usar Sinatra para API de propósito general que realizan operaciones básicas de base de datos y mutación de estado. Cuando surge la necesidad de E / S asincrónicas (como cargas de archivos, sockets web u otras cargas de trabajo de alta concurrencia) prefiero escribir aplicaciones Express especializadas. Sinatra y Express se pueden mezclar a través de http, incluso si están bajo el mismo dominio público gracias a un proxy como nginx.
Use cada uno de manera que maximice lo positivo y minimice lo negativo.