¿No sabes por dónde empezar? Ayúdanos normalizando artículos.
¿Tienes experiencia? Crea alguno de estos artículos de actualidad.

Diferencia entre revisiones de «Node.js»

(Fuentes)
(Etiqueta: nuestro-nuestra)
 
(No se muestran 10 ediciones intermedias de 4 usuarios)
Línea 5: Línea 5:
 
|familia=  
 
|familia=  
  
|imagen=Nodejs.png
+
|imagen=Nodejs1.png
  
 
|tamaño=
 
|tamaño=
  
|descripción=  
+
|descripción= Entorno de ejecución basado en ECMAScript y el motor V8 de Google.
  
 
|imagen2=
 
|imagen2=
Línea 17: Línea 17:
 
|descripción2=
 
|descripción2=
  
|creador= Ryan Dahl
+
|creador= [[Ryan Lienhart Dahl]]
  
|desarrollador=   
+
|desarrollador=  [[NodeJS Foundation]]
  
|diseñador=  
+
|diseñador= [[Ryan Lienhart Dahl]]
  
 
|modelo de desarrollo=
 
|modelo de desarrollo=
  
|lanzamiento inicial=
+
|lanzamiento inicial= 27 de mayo de 2009
  
 
|versiones=
 
|versiones=
  
|última versión estable=
+
|última versión estable= 12.16.1
  
|género=
+
|género= Dirigida por eventos
  
|sistemas operativos=
+
|sistemas operativos= [[Windows]], [[Mac OS X]], [[Linux]], [[Solaris]], [[FreeBSD]], [[OpenBSD]], [[webOS]]
  
 
|idioma=
 
|idioma=
  
|licencia=  
+
|licencia= Licencia MIT
  
 
|premios=
 
|premios=
  
|web=
+
|web=https://nodejs.org
  
 
}}
 
}}
  
<div align="justify">
 
  
'''Node.js''' .Es una plataforma de programación del lado del servidor, basado en el motor de JavaScript V8 de Google Chrome
+
 
 +
'''Node.js'''. Es un entorno de desarrollo, basado en el motor V8 de Google.
  
 
== ¿Qué es Node.js?  ==
 
== ¿Qué es Node.js?  ==
Node.js es un entorno de programación en la capa del servidor basado en el lenguaje de programación Javascript, con I/O de datos en una arquitectura orientada a eventos, y basado en el motor Javascript V8. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web.
+
Node.js es un entorno de desarrollo en la capa del servidor (pero no limitándose a ello) basado en el estándar ECMAScript y en el motor V8, con I/O de datos en una arquitectura orientada a eventos. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web.
 
 
Node.js es una nueva tecnología que está cambiando la forma en que se construyen y escalan las aplicaciones web en tiempo real. Permitiendo crear aplicaciones robustas que consumen muchos menos recursos que las desarrolladas con otros lenguajes.
 
 
 
Node usa el motor de JavaScript V8 de Google: una maquina virtual (VM) tremendamente rápida y de gran calidad escrita por gente como Lars Bak, uno de los mejores ingenieros del mundo especializados en VMs. V8 es actualizado constantemente y es uno de los intérpretes más rápidos que puedan existir en la actualidad para cualquier lenguaje dinámico. Además las capacidades de Node para I/O (Entrada/Salida) son realmente ligeras y potentes, dando al desarrollador la posibilidad de utilizar a tope la I/O del sistema.
 
 
 
Node soporta protocolos [[TCP], [[DNS]] y [[HTTP]].
 
  
===¿Qué hace diferente a Node.js? ===
 
Una de las razones de la elección de Node.js para crear aplicaciones, es la baja latencia en tiempo real de aplicaciones. Siendo su rendimiento y velocidad  muy superior.
 
  
La cantidad real de recursos que se utiliza es mucho más pequeño, y puede conseguir mucho más de menos servidores.
+
== Aspectos Técnicos ==
  
Node.js permite que sólo se asignen los recursos del servidor cuando se necesita usarlos, Todo el mundo quiere hacer aplicaciones mucho más poderosas – cosas como Google Instant y Facebook, soportar millones de usuarios en un montón de dispositivos en tiempo real. Estas son las expectativas que la gente tiene de las aplicaciones ahora.  
+
=== V8 ===
 +
[[V8]] es el entorno de ejecución para [[JavaScript]] creado para Google Chrome. Es software libre desde 2008, está escrito en C++ y compila el código fuente JavaScript en código de máquina en lugar de interpretarlo en tiempo real.
  
El punto de Node.js es que es muy rápido, es muy fácil de escalar, y el aspecto Javascript significa que es más fácil de construir.
+
Node.js contiene libuv para manejar eventos asíncronos. Libuv es una capa de abstracción de funcionalidades de redes y sistemas de archivo en sistemas Windows y sistemas basados en POSIX como [[Linux]], [[Mac OS X]] y [[Unix]].
  
 +
El cuerpo de operaciones de base de Node.js está escrito en JavaScript con métodos de soporte escritos en [[C++]].
  
=== Características de Node.js ===
+
=== Módulos ===
Node utiliza el motor de JavaScript que utiliza Google Chrome, pero tiene una particularidad que no tienen actualmente otras plataformas de programación basadas en JavaScript, y es que Node toma el JavaScript en ejecución del browser y lo mueve al servidor, ejecutando el código en el servidor y no en el browser del usuario. Esto le otorga la particularidad de que le permite a los desarrolladores crear el back-end de la aplicación (la parte de la app que se ejecuta en el servidor). En teoría Node permite al desarrollador crear aplicaciones tanto para su ejecución en el cliente (browser del usuario) como aplicaciones para que se ejecuten en el servidor.
 
  
Otras de las particularidades interesantes de Node es que es un sistema de tipo Event Driven (basado en eventos) y es asincrónico. Esto significa que Node responde a eventos (un mandato del usuario o un mensaje de otra aplicación) y no a threads o hilos de ejecución (un thread es una tarea que se ejecuta paralelamente con otra tarea en el sistema operativo). Esta forma de operar le permite a Node funcionar de manera que no tiene que esperar a que una tarea termine para comenzar otra. Por ejemplo si pide información a una base de datos, puede ejecutar otra tarea sin necesidad de esperar a que la base de datos le retorne la respuesta a su petición.
+
Node.js incorpora varios módulos compilados en el propio binario, como por ejemplo el módulo de red, que proporciona una capa para programación de red asíncrona y otros módulos fundamentales, como por ejemplo Path, FileSystem, Buffer, Timers y el de propósito más general Stream. Es posible utilizar módulos desarrollados por terceros, ya sea como archivos ".node" precompilados, o como archivos en javascript plano. Los módulos Javascript se implementan siguiendo la especificación CommonJS para módulos,​ utilizando una variable de exportación para dar a estos scripts acceso a funciones y variables implementadas por los módulos.
  
 +
Los módulos de terceros pueden extender node.js o añadir un nivel de abstracción, implementando varias utilidades middleware para utilizar en aplicaciones web, como por ejemplo los frameworks Connect y [[Express]]. Pese a que los módulos pueden instalarse como archivos simples, normalmente se instalan utilizando el [[Node Package Manager]] (npm) que nos facilitará la compilación, instalación y actualización de módulos así como la gestión de las dependencias. Además, los módulos que no se instalen en el directorio por defecto de módulos de Node necesitarán la utilización de una ruta relativa para poder encontrarlos.
  
=== ¿Qué diferencias tiene respecto a Apache u otros servidores web? ===
+
=== Concurrencia ===
  
[[Apache]] crea un nuevo hilo por cada conexión cliente-servidor. Esto funciona bien para pocas conexiones, pero crear nuevos hilos es algo costoso, así como los cambios de contexto. Como vemos en la siguiente gráfica, a partir de 400 conexiones simultáneas, el número de segundos para atender las peticiones crece considerablemente. Podemos decir que Apache funciona bien pero no es el mejor servidor para lograr máxima concurrencia (tener el número mayor de conexiones abiertas posibles).  
+
Node.js funciona con un modelo de evaluación de un único hilo de ejecución, usando entradas y salidas asíncronas las cuales pueden ejecutarse concurrentemente en un número de hasta cientos de miles sin incurrir en costos asociados al cambio de contexto.​ Este diseño de compartir un único hilo de ejecución entre todas las solicitudes atiende a necesidades de aplicaciones altamente concurrentes, en el que toda operación que realice entradas y salidas debe tener una función callback. Un inconveniente de este enfoque de único hilo de ejecución es que Node.js requiere de módulos adicionales como cluster para escalar la aplicación con el número de núcleos de procesamiento de la máquina en la que se ejecuta.
  
Uno de los puntos fuertes de Node es su capacidad de mantener muchas conexiones abiertas y esperando. En Apache por ejemplo el parámetro MaxClients por defecto es 256. Este valor puede ser aumentado para servir contenido estático, sin embargo si se sirven aplicaciones web dinámicas en [[PHP]] u otro lenguaje es probable que al poner un valor alto el servidor se quede bloqueado ante muchas conexiones -esto dependerá del trabajo que la aplicación web de al servidor y de su capacidad hardware-.
+
=== Desarrollo homogéneo entre cliente y servidor ===
  
Una aplicación para Node se programa sobre un solo hilo. Si en la aplicación existe una operación bloqueante (I/O por ejemplo), Node creará entonces otro hilo en segundo plano, pero no lo hará sistemáticamente por cada conexión como haría Apache. En teoría Node puede mantener tantas conexiones como número máximo de archivos descriptores (sockets) soportados por el sistema. En un sistema UNIX este límite puede rondar por las 65.000 conexiones, un número muy alto. Sin embargo en la realidad la cifra depende de muchos factores, como la cantidad de información que esté la aplicación distribuyendo a los clientes. Una aplicación con actividad normal podría mantener 20-25.000 clientes a la vez sin haber apenas retardo en las respuestas.
+
Node.js puede ser combinado con una base de datos documental (por ejemplo, MongoDB o CouchDB) y JSON lo que permite desarrollar en un entorno de desarrollo JavaScript unificado. Con la adaptación de los patrones para desarrollo del lado del servidor tales como MVC y sus variantes MVP, MVVM, etc. Node.js facilita la reutilización de código del mismo modelo de interfaz entre el lado del cliente y el lado del servidor.
  
Un inconveniente de Node es que debido a su arquitectura de usar sólo un hilo también que sólo puede usar una CPU. Un método para usar múltiples núcleos sería iniciar múltiples instancias de Node en el servidor y poner un balanceador de carga delante de ellos.
+
== Utilización ==
 
 
 
 
 
 
 
 
== Utilización de Node.js==
 
Node puede ser utilizado para desarrollar aplicaciones que manejen altos volúmenes de conexiones con otros sistemas. En este tipo de aplicaciones los tiempos de respuesta bajos marcan una delgada línea entre el éxito o fracaso.
 
 
 
Node es especialmente bueno en aplicaciones web que necesiten una conexión persistente con el navegador del cliente. Mediante una serie de técnicas llamadas Comet, puedes hacer una aplicación que envíe datos al usuario en tiempo real; es decir, que el navegador mantenga la conexión siempre abierta y reciba continuamente nuevos datos cuando los haya. Para servidores y aplicaciones clásicas que no estén preparadas para mantener muchas conexiones, la forma más sencilla es solicitar desde el navegador un cada X segundos nueva información (polling). Si tenemos muchos usuarios a la vez abriendo conexiones y haciendo peticiones a la BD nos encontramos con que nuestro servidor no da más de sí y deja de atender peticiones -acaba petando, vamos-. Un ejemplo de polling clásico es la fisgona de Menéame que realiza peticiones mediante AJAX a un script PHP que devuelve nuevos datos en JSON cada 3 segundos y actualiza la tabla de novedades.
 
 
 
===Una lista de aplicaciones para las que Node encajaría perfectamente:===
 
 
 
*Juegos online.
 
*Gestores de correo online: de esta manera teniendo el navegador abierto podríamos ver notificaciones en tiempo real de nuevos correos recibidos.
 
*Herramientas de colaboración.
 
*Chats.
 
*Redes sociales: por ejemplo para actualizar automáticamente tu muro de novedades.
 
*Herramientas de traducción en tiempo real.
 
 
 
 
 
 
 
==== Futuro ====
 
Node.js se ha convertido en una tecnología interesante, accesible y eficiente para aplicaciones en tiempo real, que cada vez utilizan más empresas para desarrollar proyectos escalables, de gran rendimiento y que permiten optimizar los costes en servidores.
 
 
 
Por su naturaleza, Node está siendo adoptado tanto para el desarrollo de aplicaciones móviles como para la nube (cloud) de Internet. Gigantes como [[Microsoft]] (que acaba de integrar Node a su nube Azure) estan adoptando esta tecnología emergente.
 
 
 
Una muestra de su auge es que Node está siendo auspiciado por Microsoft, eBay, LinkedIn y Yahoo.
 
 
 
La posibilidad de utilizar JavaScript en el servidor permite añadir nuevas funcionalidades y superar nuevos retos dentro de la programación Web. Pero Node.js es mucho más. Es un lenguaje que ha rediseñado la programación orientada a redes para adaptarla a la Web moderna, donde una aplicación puede leer y escribir datos desde diferentes sitios y trabajar con millones de usuarios.
 
 
 
Node.js está centrada en la velocidad y en la escalabilidad. Es capaz de trabajar con miles de usuarios de forma simultánea sin requerir una fuerte inversión en hardware. Node.js cuenta con miles de seguidores y compañías como eBay, LinkedIn y Microsoft ya trabajan con él.
 
  
 +
Node.js suele ser muy utilizado en aplicaciones de red, por ejemplo, servidores web, streams, sockets, etc; debido a su alta concurrencia.
  
 
=== Ejemplos ===
 
=== Ejemplos ===
Línea 130: Línea 95:
 
El código anterior crea un servidor http básico esperando a servir peticiones en el puerto 8888.
 
El código anterior crea un servidor http básico esperando a servir peticiones en el puerto 8888.
  
==¿Es compatible con navegadores?==
+
== Véase también ==
 
+
* [[React-native]]
 +
* [[Angular (framework)|Angular.Js]]
 +
* [[React.Js]]
 +
* [[Vue.js]]
  
  
 
== Fuentes ==
 
== Fuentes ==
  
[http://www.maestrosdelweb.com/editorial/¿que-es-javascript/ http://www.maestrosdelweb.com/editorial/¿que-es-javascript/]
+
* [https://mashable.com/2011/03/10/node-js/ https://mashable.com/2011/03/10/node-js/]
 
+
* [https://nodejs.org/es/about/ Acerca | Node.JS]
[http://nodejs.org/ http://nodejs.org/]
+
* [https://nodejs.org/api/cluster.html Cluster]
[http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb/ http://debuggable.com/posts/understanding-node-js ]
+
* [https://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ Node.js w/1M concurrent connections!]
[http://www.slideshare.net/amix3k/comet-with-nodejs-and-v8/ http://www.slideshare.net/amix3k/comet-with-nodejs-and-v8]
+
*[http://www.maestrosdelweb.com/editorial/¿que-es-javascript/ http://www.maestrosdelweb.com/editorial/¿que-es-javascript/]
[http://nodejs.org/jsconf.pdf/ http://nodejs.org/jsconf.pdf]
+
*[http://nodejs.org/ http://nodejs.org/]
[http://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests/ http://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests]
+
*[http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb/ http://debuggable.com/posts/understanding-node-js ]
[http://www.quora.com/Whats-the-difference-between-an-event-loop-and-a-per-request-model/ http://www.quora.com/Whats-the-difference-between-an-event-loop-and-a-per-request-model]
+
*[http://www.slideshare.net/amix3k/comet-with-nodejs-and-v8/ http://www.slideshare.net/amix3k/comet-with-nodejs-and-v8]
[http://stackoverflow.com/questions/3011317/node-js-or-erlang/ http://stackoverflow.com/questions/3011317/node-js-or-erlang]
+
*[http://nodejs.org/jsconf.pdf/ http://nodejs.org/jsconf.pdf]
[http://www.erlang.org/]
+
*[http://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests/ http://code.google.com/p/node-js-vs-apache-php-benchmark/wiki/Tests]
[http://stackoverflow.com/questions/3878096/nodejs-nodejs-org-experience-comments/ http://stackoverflow.com/questions/3878096/nodejs-nodejs-org-experience-comments]
+
*[http://www.quora.com/Whats-the-difference-between-an-event-loop-and-a-per-request-model/ http://www.quora.com/Whats-the-difference-between-an-event-loop-and-a-per-request-model]
[http://www.olympum.com/future/nodes-and-jetties/ http://www.olympum.com/future/nodes-and-jetties]
+
*[http://stackoverflow.com/questions/3011317/node-js-or-erlang/ http://stackoverflow.com/questions/3011317/node-js-or-erlang]
[http://stackoverflow.com/questions/5062614/how-to-decide-when-to-use-nodejs/ http://stackoverflow.com/questions/5062614/how-to-decide-when-to-use-nodejs]
+
*[http://stackoverflow.com/questions/3878096/nodejs-nodejs-org-experience-comments/ http://stackoverflow.com/questions/3878096/nodejs-nodejs-org-experience-comments]
 
+
*[http://www.olympum.com/future/nodes-and-jetties/ http://www.olympum.com/future/nodes-and-jetties]
== Enlaces Externos ==
+
*[http://stackoverflow.com/questions/5062614/how-to-decide-when-to-use-nodejs/ http://stackoverflow.com/questions/5062614/how-to-decide-when-to-use-nodejs]
  
[http://ejohn.org/blog/versions-of-javascript/ http://ejohn.org/blog/versions-of-javascript/]
 
  
[http://www.htmlpoint.com/javascript/corso/js_02.htm http://www.htmlpoint.com/javascript/corso/js_02.htm]
 
  
 
[[Category:Software]]
 
[[Category:Software]]

última versión al 09:04 6 oct 2021

Node.js
Información sobre la plantilla
Nodejs1.png
Entorno de ejecución basado en ECMAScript y el motor V8 de Google.
CreadorRyan Lienhart Dahl
DesarrolladorNodeJS Foundation
Diseñado porRyan Lienhart Dahl
Lanzamiento inicial27 de mayo de 2009
Última versión estable12.16.1
GéneroDirigida por eventos
Sistemas Operativos compatiblesWindows, Mac OS X, Linux, Solaris, FreeBSD, OpenBSD, webOS
LicenciaLicencia MIT
Sitio web
https://nodejs.org


Node.js. Es un entorno de desarrollo, basado en el motor V8 de Google.

¿Qué es Node.js?

Node.js es un entorno de desarrollo en la capa del servidor (pero no limitándose a ello) basado en el estándar ECMAScript y en el motor V8, con I/O de datos en una arquitectura orientada a eventos. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web.


Aspectos Técnicos

V8

V8 es el entorno de ejecución para JavaScript creado para Google Chrome. Es software libre desde 2008, está escrito en C++ y compila el código fuente JavaScript en código de máquina en lugar de interpretarlo en tiempo real.

Node.js contiene libuv para manejar eventos asíncronos. Libuv es una capa de abstracción de funcionalidades de redes y sistemas de archivo en sistemas Windows y sistemas basados en POSIX como Linux, Mac OS X y Unix.

El cuerpo de operaciones de base de Node.js está escrito en JavaScript con métodos de soporte escritos en C++.

Módulos

Node.js incorpora varios módulos compilados en el propio binario, como por ejemplo el módulo de red, que proporciona una capa para programación de red asíncrona y otros módulos fundamentales, como por ejemplo Path, FileSystem, Buffer, Timers y el de propósito más general Stream. Es posible utilizar módulos desarrollados por terceros, ya sea como archivos ".node" precompilados, o como archivos en javascript plano. Los módulos Javascript se implementan siguiendo la especificación CommonJS para módulos,​ utilizando una variable de exportación para dar a estos scripts acceso a funciones y variables implementadas por los módulos.

Los módulos de terceros pueden extender node.js o añadir un nivel de abstracción, implementando varias utilidades middleware para utilizar en aplicaciones web, como por ejemplo los frameworks Connect y Express. Pese a que los módulos pueden instalarse como archivos simples, normalmente se instalan utilizando el Node Package Manager (npm) que nos facilitará la compilación, instalación y actualización de módulos así como la gestión de las dependencias. Además, los módulos que no se instalen en el directorio por defecto de módulos de Node necesitarán la utilización de una ruta relativa para poder encontrarlos.

Concurrencia

Node.js funciona con un modelo de evaluación de un único hilo de ejecución, usando entradas y salidas asíncronas las cuales pueden ejecutarse concurrentemente en un número de hasta cientos de miles sin incurrir en costos asociados al cambio de contexto.​ Este diseño de compartir un único hilo de ejecución entre todas las solicitudes atiende a necesidades de aplicaciones altamente concurrentes, en el que toda operación que realice entradas y salidas debe tener una función callback. Un inconveniente de este enfoque de único hilo de ejecución es que Node.js requiere de módulos adicionales como cluster para escalar la aplicación con el número de núcleos de procesamiento de la máquina en la que se ejecuta.

Desarrollo homogéneo entre cliente y servidor

Node.js puede ser combinado con una base de datos documental (por ejemplo, MongoDB o CouchDB) y JSON lo que permite desarrollar en un entorno de desarrollo JavaScript unificado. Con la adaptación de los patrones para desarrollo del lado del servidor tales como MVC y sus variantes MVP, MVVM, etc. Node.js facilita la reutilización de código del mismo modelo de interfaz entre el lado del cliente y el lado del servidor.

Utilización

Node.js suele ser muy utilizado en aplicaciones de red, por ejemplo, servidores web, streams, sockets, etc; debido a su alta concurrencia.

Ejemplos

El tipico (hello_world.js):

console.log('Hello world');

Un servidor HTTP básico

var http = require("http");
http.createServer(function(request, response) {
 response.writeHead(200, {"Content-Type": "text/html"});
 response.write("Hola Mundo");
 response.end();
}).listen(8888);
  

El código anterior crea un servidor http básico esperando a servir peticiones en el puerto 8888.

Véase también


Fuentes