¿Cuál es la diferencia entre NodeJS y Ruby on Rails basado en experiencias del mundo real?

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).

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.

Solo tengo una experiencia limitada e indirecta con Rails, pero aquí hay algunas observaciones:

Ruby on Rails:

  • Es un marco completo de servidor altamente obstinado.
  • Funciona sincrónicamente de manera predeterminada, por lo que cada consulta del navegador debe completarse antes de que un subproceso de servidor en particular pueda atender otra solicitud.
  • Generalmente representa HTML de plantillas en el servidor, o se usa como un punto final API. Si está creando una aplicación Angular, por ejemplo, probablemente sea atendida por un servidor web y solo use Rails para obtener datos de la base de datos.

NodeJS

  • Es una plataforma que admite varios marcos (ExpressJS es uno de los más populares).
  • Funciona de forma asíncrona de manera predeterminada, por lo que un subproceso del servidor puede manejar miles de conexiones concurrentes, así como una conexión WebSocket en tiempo real de larga duración.
  • Puede servir archivos, contenido dinámico, puntos finales API o aplicaciones web isomorfas. O cualquier combinación de los cuatro.

Entre la velocidad bruta del compilador V8 JavaScript JIT y su operación asincrónica, puede ejecutarse entre 5 y 50 veces más rápido de acuerdo con los puntos de referencia de TechEmpower Framework.

Sé que los programadores son caros, pero también lo son los servidores, y también lo es administrar 50 veces más servidores. Así que siento que NodeJS es una plataforma más sólida.

Además de eso, TypeScript le ofrece definiciones opcionales de tipo estático, que es una herramienta muy poderosa para garantizar que su código esté conectado correctamente, le ayuda a refactorizar su código y le ayuda a escribirlo más rápidamente.

Ganar ganar ganar.

Hay características distintivas que los separan, y son lo suficientemente maduros para que brillen sus respectivas fortalezas. Hagamos una comparación lado a lado con Node.js en la industria del desarrollo web hoy. Aquí está la comparación de Node.js con Ruby.

Comparar Ruby con Node.js es como comparar con dos frutas. Como se dijo, tienen sus propias ventajas y desventajas. En primer lugar, Node.js es un entorno de tiempo de ejecución de aplicaciones que le permite escribir aplicaciones del lado del servidor en JavaScript. Como la mayoría de los desarrolladores saben, Node.js no es un marco ni un lenguaje. Quizás una mejor comparación sería comparar Ruby on Rails con ExpressJS (un marco popular para Node.js), pero aun así, todavía no es una comparación verdadera. Ruby es perfecto para situaciones en las que tiene más funcionalidades CRUD y creación de prototipos, mediante el uso de sus bibliotecas disponibles. Pero eventualmente, ExpressJS o cualquier otro marco JS liderará a la industria por su velocidad de desarrollo única y su curva de aprendizaje fácil que provoca la disponibilidad de recursos en el mercado. Solo quiero repetir que mantener el lenguaje para el servidor y el lado del cliente también es bueno para la productividad.

Algunos consejos para que elija Node.js.

Si el requisito es desarrollar aplicaciones en tiempo real : Node.js es la mejor tecnología para un chat u otras herramientas de colaboración. Destaca por su rendimiento y facilidad de desarrollo que Ruby o Python.

¿El requisito es construir aplicaciones de transmisión ? Node.js se adapta mejor.

Si el requisito necesita construir API : sin duda, Node.js es la mejor opción, ya que es perfecto para manejar solicitudes de E / S y fácilmente escalable.

Lenguaje único para frontend y backend : útil para los desarrolladores que pueden usar el lenguaje JavaScript en el front-end y el back-end.

Es 100% la elección del desarrollador que puede elegir una tecnología en la que el ecosistema se adapte más. Node.js está a un ritmo sorprendente, de hecho, una red de código abierto de rápido crecimiento.

Consulte el blog y los artículos de CronJ para obtener más información sobre las ventajas de Node.js. O comuníquese con representantes de CronJ por correo electrónico en [correo electrónico protegido] . Gracias