¿Cuáles son las ventajas y desventajas de usar Node.js en comparación con la función asincrónica de servlet 3.0 de Java?

Una pregunta mejor formulada es cuál es la ventaja de Node.js en comparación con Java, ya que Java hace muchas cosas que Node.js hace (incluidas las E / S sin bloqueo) realmente bien y algo más.

He usado Spring Framework y Java 7 (desafortunadamente, no tengo funciones de E / S sin bloqueo o Java 8 utilizado por mí, ¡con suerte en un próximo proyecto con Play Framework quizás!) En algunos proyectos y luego en Node.js para otro proyecto (aún pasando) y soy muy aficionado a ambas plataformas por sus respectivos méritos. Entonces mi respuesta aquí no es parcial.

Ventajas

  • Proceso de servidor ligero. V8 tiene un tiempo de inicio realmente rápido. Lo encontré instantáneo, también conocido como muy comparable a los entornos de script Python, Perl y Ruby. JVM tiene un tiempo de calentamiento notable.
  • Muy accesible para desarrolladores con cierta experiencia de desarrollo frontend debido a JavaScript. La mayoría de los desarrolladores de Java Django, Rails y full stack también conocerán JavaScript, por lo que Node.js es rápido de aprender.
  • Fácil de aprender (subjetivo) ya que la cadena de herramientas habitual de Node.js compuesta por Node.js o io.js – JavaScript I / O, Express 4.x – API Reference, request, request-json, bunyan, etc. es intuitiva
  • Para aquellos que se quejan, no todas las características de V8 están disponibles y ECMAScript 5.1 apesta, hay compatibilidad con ECMAScript 6 en io.js
  • NPM es más intuitivo que Maven y Gradle y también está muy bien documentado.
  • Comparado para ser más rápido que casi todos los lenguajes de secuencias de comandos dinámicos populares del lado del servidor (bueno, excepto LuaJIT). Sin embargo, la competencia es principalmente Python, Perl, Ruby y PHP.
  • Es barato de alojar ya que el proceso V8 es liviano y la gota de RAM de $ 512MB de DigitalOcean y el 1x Dyno gratis de Heroku con 512MB de RAM son perfectos para probar servidores. JVM usará mucha memoria por sí mismo en estas máquinas.
  • El caso de uso ideal es cuando tiene un servidor liviano que se comunica con un grupo de bases de datos (y otros servicios) utilizando RESTful JSON a través de HTTP.
  • Java asincrónico (sin bloqueo de E / S) es algo con lo que muchos desarrolladores no tienen experiencia, y aunque solo estoy adivinando, debería ser más fácil encontrar desarrolladores de Node.js que desarrolladores de Java asíncronos, aunque muy pronto todos los desarrolladores de Java lo harán. estar usando algo como Netty para escribir servidores web.
  • El código Node.js es mucho menos detallado en comparación con el código Java. Si está involucrado en una demanda relacionada con su software y el tribunal exige el código fuente impreso como evidencia, matará muchos más árboles como desarrollador de Java que como desarrollador de Node.js.
  • Fácil de contratar estudiantes de primer año: mayor probabilidad de que un graduado universitario esté familiarizado con JavaScript que Java, por lo que puede descifrar el código con un tiempo de aceleración menor.

Desventajas

  • El rendimiento absoluto es mejor en JVM. Realmente no le importa el tiempo de calentamiento de unos segundos si puede atender solicitudes como locas.
  • El enfoque asíncrono de todo duele (a menos que comience a usar alguna biblioteca para simplificar las cosas). El código Java puede ser más fácil para los desarrolladores novatos.
  • No hay un buen IDE de código abierto disponible. Uso Atom and Brackets para Node.js que no son nada en comparación con NetBeans, IntelliJ IDEA y Eclipse. En Java, su IDE puede hacer muchas refactorizaciones y conjeturas para ayudarlo a desarrollar proyectos más complejos.
  • La depuración no es tan madura como con Java (aunque adobe / brackets con adobe-research / theseus lleva la depuración de Node.js a una nueva altura).
  • Las herramientas de concurrencia en Node.js no se acercan a Java. Por lo general, NO escribirá código concurrente en Node. La E / S concurrente es posible (y realmente buena), pero Node.js no está diseñado para el procesamiento de números multiproceso.
  • Probado para ser empresarial amigable. Muchos casos de uso tienen soluciones preparadas.
  • El ecosistema JVM no tiene comparación. Muchos buenos proyectos de la Fundación Apache, bases de datos poderosas para cada propósito y bibliotecas que no son servidores web (como OpenNLP) son realmente buenos. Si no le gusta la verbosidad o el estilo de codificación de Java, tiene otros lenguajes JVM como Groovy, Scala y Clojure.
  • Expertos fáciles de contratar: Java es una plataforma madura y hay muchas personas con un par de décadas de experiencia en la administración, en comparación con el ecosistema Node.js más reciente.

En palabras simples, el nodo es solo otro servidor como Apache, IIS, TOM, etc. Pero a diferencia de esos servidores, Node no trata con PHP, .NET o JAVA. Ejecuta JavaScript en el lado del servidor. Sí, JavaScript sin navegador; ese es el nodo El nodo en sí no está hecho en JavaScript por completo; más bien sus envoltorios están hechos en C. Simplemente ejecuta JavaScript. A continuación hay una lista, qué no es Node y qué es Node.

PROS

  • El IO controlado por eventos asincrónicos ayuda al manejo concurrente de solicitudes.
  • Utiliza JavaScript, que es fácil de aprender.
  • Comparta el mismo código con el servidor y el cliente.
  • npm, los módulos empaquetados de Node ya se han vuelto enormes y siguen creciendo.
  • Comunidad activa y vibrante, con gran cantidad de código compartido a través de github, etc.
  • Puede transmitir archivos grandes.

Contras

  • Node.js no proporciona escalabilidad. Una CPU no va a ser suficiente; la plataforma no ofrece la capacidad de escalar para aprovechar los múltiples núcleos comúnmente presentes en el hardware de clase de servidor actual.
  • Tratar con una base de datos relacional es una molestia si está utilizando Node.
  • Sin profundizar en JavaScript si alguien inicia Node, puede enfrentar un problema conceptual.
  • Node.js no es adecuado para tareas intensivas en CPU. Es adecuado solo para cosas de E / S (como servidores web).

Para una comparación más detallada, puede visitar.

Cortesía – Node.js – razones de uso, pros y contras, ¡mejores prácticas!

La mayor parte de lo que escucha sobre Nodo vs. servlets asíncronos está, en el mejor de los casos, mal informado. La única y única razón por la que Node se hizo popular es que obtienes asincronía sin tener que escribir ningún código de subproceso. Servlet API 3.0 le brinda la asincronía en forma de un objeto Future, que aún debe interrogar y consumir, una vez que regrese el flujo descendente. Depende de usted crear esos nuevos hilos que lo harán sin bloquear el flujo ascendente. Con Node, no obtendrá un futuro de regreso: más bien, pasa una función de devolución de llamada que Node llamará, una vez que el flujo descendente haya regresado, por usted. Node (JavaScript, en realidad, por supuesto) hará todo ese trabajo de subprocesamiento, porque no se puede confiar en que lo haga bien. (¡Lo cual es correcto en la mayoría de los casos!)

Dicho esto, con Scala y el advenimiento del soporte lambda en JVM, se espera que la bacanal de JavaScript en el servidor termine pronto.

More Interesting

¿Cuánto tiempo le llevará a un desarrollador web recrear Facebook.com? ¿Sería su versión de Facebook tan rentable como la real?

¿Dónde puedo aprender los conceptos básicos de la creación de bases de datos para Javascript?

Si tiene que elegir entre React y Angular 2/4 en 2017 para desarrollar la parte frontal de un producto desde cero, ¿cuál preferiría? ¿Por qué?

¿Cómo entra un diseñador web front-end en el desarrollo de juegos?

¿Hay algún script de clonación PHP Pinterest gratuito?

¿Hay futuro para los desarrolladores web front-end? Mi pregunta es específicamente sobre: ​​1) Aumento de salario basado en la experiencia y 2) Potencial de crecimiento dentro de una empresa.

¿Por qué no hay muchos desarrolladores frontend que se convierten en líderes de equipos de desarrollo?

¿Hacer Sub 4 Sub para YouTube en Facebook y otros sitios es lo correcto?

¿Cuál es la forma más fácil de crear un sitio web que se vea y se sienta como Google Inbox?

En un proyecto Agile, ¿cómo organizas una gran acumulación (cientos de historias de usuarios / epopeyas)?

Cómo usar la directiva de inclusión de páginas en la página JSP

¿Pueden una aplicación de rieles y una API de rieles separada compartir una base de datos?

¿La categorización de comentarios es una buena idea?

Como desarrollador web, ¿qué herramientas consideró una pérdida de tiempo y cuáles son esenciales?

Cómo aprender a programar por mí mismo que soy lo suficientemente capaz de construir sitios web revolucionarios