Se reduce a una sola cosa: ¿prefiere tomar muchas decisiones (NodeJS) o tomarlas por usted (Rails)?
Tampoco soy un experto, pero he creado prototipos y aplicaciones de producción con ambas tecnologías (decenas de millones de páginas vistas), tanto por mi cuenta como en equipo.
Primero lo primero: estas son cosas diferentes. Rails es un marco. Node.JS es un entorno que le permite ejecutar javascript del lado del servidor; aún le faltarían muchas piezas para llegar a un marco. Por ejemplo, puede decidir usar ExpressJS como su servidor web y Mongoose como (más o menos) ORM, con AngularJS en el lado del cliente (la llamada pila MEAN).
- ¿Cuáles son las cosas que necesito aprender para hacer aplicaciones web?
- ¿Qué aplicaciones web realmente podrían mejorar su sección de preguntas frecuentes / ayuda?
- Aplicaciones web: ¿Qué es un servidor web?
- ¿Cómo se crea un entorno de mundo virtual en línea que la gente realmente usará?
- ¿Cuál es el propósito de tener una base de datos (almacenamiento persistente) en el lado del cliente de una aplicación web?
Pero eso realmente subraya la diferencia filosófica central entre las dos tecnologías. La filosofía principal de Rails es la “convención sobre la configuración”, y aquí es donde entran las “decisiones”. Con Rails:
- Es muy fácil ponerse en marcha. No tiene que tomar muchas decisiones, y no solo las cosas funcionan bien fuera de la caja, sino que también funcionan bien juntas. Las diferentes versiones de Rails han incluido diferentes paquetes de manera predeterminada, pero siempre obtendrá una pila completa lista para usar.
- Generar modelos, andamios, etc., es muy fácil, siempre y cuando utilice patrones y relaciones probados. Esto hace que la creación de prototipos sea muy fácil.
- La personalización es más difícil, y encontrarás que la velocidad se ralentiza bastante rápido. Claro, hay una gran comunidad y una tonelada de paquetes disponibles para casi todo lo que necesita, pero todos esos paquetes tendrán la misma filosofía de “convención”, por lo que será más difícil personalizarlos.
Rails es dogmático. Node.JS, por otro lado, es minimalista y modular. Desde el momento en que intenta configurar su aplicación, se enfrentará a una gran cantidad de opciones. Esto incluye todo, desde qué servidor usar, hasta qué tecnología del lado del cliente usar, cuál será su almacenamiento de datos, hasta qué sabor de JS desea. ¿Quieres JS o ES6 (o tal vez ES2016 aka ES7)? Gulp o Webpack? ¿Angular o reaccionar? MongoDB o SQL? ¿Qué sistema de plantillas? El ecosistema JS está extremadamente fragmentado en este momento: excelente para la elección, malo si desea ponerse en marcha rápidamente. Por supuesto, la gente ha construido proyectos “repetitivos” o “iniciales” que se agrupan en un montón de bibliotecas, pero aun así, debe elegir con cuál de ellas desea comenzar. Por ejemplo, ¿desea usar un generador Yeoman como Angular Full-Stack (pila MEAN / SEAN)? ¿Un paquete de inicio comunitario como React-Redux-Universal-Hot-Example (nombre maravillosamente autodescriptivo)? ¿O tal vez el electrodo de Walmart? Por cierto, estos paquetes de inicio no solo te ayudan a elegir la tecnología, sino que también recomiendan estructuras de directorios, esquemas de nombres, etc., todo lo que Rails ha estandarizado y tiene opiniones.
Entonces, en mi experiencia, si no ha utilizado ninguna tecnología antes, con Rails, tendrá un prototipo listo en unos días, entonces las cosas se ralentizarán. Con una pila NodeJS, habrás descubierto qué piezas quieres usar en unos días.
Hay algunas otras consideraciones secundarias:
- Complejidad del lado del cliente: si está creando un SPA (aplicación de una sola página), tiene muchas más opciones en NodeJS land. Podría tener React / Angular desde el primer día, y la cantidad de bibliotecas a las que puede acceder a medida que construye su interfaz de usuario es interminable (¿quiere alertas de estilo tostador, un desplazador infinito, un cargador de archivos? ¿Desea Bootstrap, fuentes geniales o animaciones? puede instalar cualquiera de estos para usted en un solo comando, suponiendo que no le importará la hinchazón JS / CSS)
- SEO: por otro lado, si te importa el SEO, con NodeJS es muy fácil quedar atrapado con una pila que no funciona bien con los rastreadores sin un trabajo considerable (ten en cuenta: incluso paquetes que dicen ser “universales” o ” las pilas “polimórficas” no son tan fáciles como parecen, no me hagas empezar con eso).
- Consideración en un solo idioma: hay algo maravilloso en escribir el mismo idioma para el código de su cliente y servidor. Todo su equipo puede ser esencialmente de pila completa (usted tiene menos aislamiento entre su gente de “front-end” y “back-end”)
- Grupo de reclutamiento: creo que el grupo de talento aparente de NodeJS se verá mucho más pronto (si aún no lo ha hecho), por lo que podría ser más fácil encontrar desarrolladores de NodeJS, pero creo que aún es más fácil encontrar buenos desarrolladores de Rails. Su naturaleza dogmática solo alienta la disciplina.
- Rendimiento: si recién está comenzando, no me preocuparía demasiado por esto. Pero NodeJS definitivamente será más ligero / delgado desde el primer momento debido al modelo de evento. En última instancia, el rendimiento de su aplicación probablemente dependerá de las decisiones arquitectónicas que tome.
- Futuro: creo que está claro que ambas tecnologías tienen futuros vibrantes. NodeJS probablemente esté creciendo más rápido en este momento. Hay algunas afirmaciones de que está sobrevalorado, pero creo que los paquetes particulares de NodeJS podrían estar sobrevalorados, pero el propio NodeJS continuará creciendo y evolucionando. Además, el ritmo de desarrollo en NodeJS es bastante impresionante: solo eche un vistazo a algunos de los cambios que lo han convertido en el estándar ES (por ejemplo, promesas), y algunas de las propuestas que podrían ser el próximo año o dos (por ejemplo, asíncrono / espera).
- Seguridad: no soy un tipo de seguridad de ninguna manera, pero he escuchado quejas sobre NodeJS que tiene problemas de seguridad.
La conclusión es que ambas son tecnologías increíbles. Siempre estoy emocionado cuando tengo la oportunidad de escribir código con cualquiera de los dos. Dicho esto, si quieres que tus decisiones se tomen por ti, una curva de aprendizaje muy rápida y un progreso rápido, ve con Rails. De lo contrario, vaya con una solución NodeJS.