Sesión 1: Aspectos sobre NodeJs y JavaScript

JavaScript
Javascript es un lenguaje de programación que surgió con el objetivo inicial de programar ciertos comportamientos sobre las páginas web y HTML, respondiendo a la interacción del usuario y la realización de automatismos sencillos.

  • Evolución del lenguaje:
Javascript fue inventado en el año 1995 por Brendan Eich y se convirtio en un estandar ECMA en 1997, donde ECMAScript es el nombre oficial del lenguaje.

Año JavaScriptECMANavegador
1996 1.0
Netscape 2
1997
ECMAScript 1 IE 4
1998 1.3
Netscape 4
1999
ECMAScript 2 IE 5
2000
ECMAScript 3 IE 5.5
2000 1.5
Netscape 6
2000 1.5
Firefox 1
2011
ECMAScript 5 IE 9
2011 1.8.5
Firefox 4
2012

IE 10
2012

Chrome 23
2012

Safari 6
2013

Firefox 21
2013

Opera 15
2015
ECMAScript 2015 Soportado parcialmente en todos los navegadores
  • JavaScript y DOM (Document Object Model):
DOM es la estructura de objetos que genera el navegador cuando se carga un documento y se puede alterar mediante Javascript para cambiar dinámicamente los contenidos y aspecto de la página.

Los objetos del DOM modelizan tanto la ventana del navegador como el historial, el documento o página web, y todos los elementos que pueda tener dentro la propia página, como párrafos, divisiones, tablas, formularios y sus campos, etc. A través del DOM se puede acceder, por medio de Javascript, a cualquiera de estos elementos, es decir a sus correspondientes objetos para alterar sus propiedades o invocar a sus métodos. Con todo, a través del DOM, queda disponible para los programadores de Javascript, cualquier elemento de la página, para modificarlos, suprimirlos, crear nuevos elementos y colocarlos en la página, etc

El modelo HTML DOM esta construido como un árbol de objetos:
  
Con dicho modelo de objetos, JavaScript obtiene toda la potencia que necesita para crear HTML de manera dinámica. Es por esto que JavaScript tiene la posibilidad de:
    • Cambiar todos los elementos HTML en la página.
    • Cambiar todos los atributos HTML en la página.
    • Cambiar todos los estilos CSS en la página.
    • Eliminar elementos y atributos HTML existentes.
    • Agregar nuevos elementos y atributos HTML.
    • Reaccionar a todos los eventos HTML existentes en la página.
    • Crear nuevos eventos HTML en la página.
  • Estándares:
En sus inicios, no todas las implementaciones de JavaScript eran compatibles con los
diferentes navegadores existentes en el mercado. Para superar este problema, se presentó JavaScript ante el organismo de normalización ECMA (European Computer Manufacturer’s Association) para crear una base de lenguaje consensuada y en el año 1996 se aprobó como la norma ECMA-262.
El lenguaje normalizado se llama ECMAScript y desde entonces ha pasado por varias versiones más. A pesar de que tanto JavaScript como sus variantes tienen extensiones y alcances más amplios que ECMAScript, siguen siendo compatibles con el núcleo que es ECMAScript. En la práctica JavaScript sigue siendo el nombre usado para referenciar al lenguaje.

  • Aspectos generales: Tipos de datos, salidas, funciones, llamadas, etc:
    • Salidas
      • innerHTML.
<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = 5 + 6;
</script>
      • document.write().
<script>
document.write(5 + 6);
</script>
      • window.alert().
<script>
window.alert(5 + 6);
</script>
      • console.log().
<script>
console.log(5 + 6);
</script>
    • Sentencias:
var a, b, c; // Declarar 3 variables
a = 5;       // Asignar el valor 5 a
b = 6;       // Asigna el valor 6 a b
c = a + b;   // Asigna la suma de a y b a c
    • Operadores:
Operador Descripción
+ Adicción
- Sustracción
* Multiplicación
** Exponenciación
/ División
% Módulo
++ Incremento
-- Decremento
    • Tipos de datos:
var length = 16;                             // Número
var lastName = "Johnson";                    // Cadena
var x = {firstName:"John", lastName:"Doe"};  // Objeto
    • Funciones:
// Llamada
var x = nombre(4, 3, 6);

// Declaración
function nombre(parametro1, parametro2, parametro3) {
  // código que será ejecutado
  return ...; // El retorno es opcional
}
Puede encontrar más información en: JavaScript Tutorial.

Back-end: NodeJs
NodeJS es un código abierto de JavaScript que está diseñado para generar aplicaciones web de forma altamente optimizada. Node.js es una forma de ejecutar JavaScript en el servidor, basado en eventos. Node ejecuta JavaScript utilizando el motor V8, desarrollado por Google para uso de su navegador Chrome. Aprovechando el motor V8 permite a Node proporciona un entorno de ejecución del lado del servidor que compila y ejecuta JavaScript a velocidades increíbles. El aumento de velocidad es importante debido a que V8 compila JavaScript en código de máquina nativo, en lugar de interpretarlo o ejecutarlo como bytecode. Node es de código abierto, y se ejecuta en Mac OS X, Windows y Linux.
  • Aspectos:
    • Un thread simple: Se basa en el tratamiento de conexiones de forma unificada a partir de un único hilo complementado con un bucle de eventos (Event Loop) de tipo asíncrono. De este modo, las peticiones que se vayan haciendo reciben un tratamiento en forma de eventos y pertenecen a este único bucle.
    • Concurrente no paralelo: Realizar varias tareas a la vez de manera no paralela.
    • Asincrónico: Esto significa que todas las tareas que se desarrollan por el servidor se hacen de forma paralela por lo que pueden efectuarse de forma simultánea y sin que se produzca ningún tipo de bloqueo en el flujo de trabajo. El resultado es una ventaja competitiva considerable que proporciona a la arquitectura de las aplicaciones web una mayor potencia y velocidad de procesamiento.
    • Llamadas a callbacks: Diferentes procesos no se desarrollarán en un mismo nivel. De este modo, aunque todos los eventos formen parte de un mismo hilo de procesos, se trabajará con ellos mediante funciones paralelas dentro del mismo bucle. Cuando una tarea en segundo plano se ejecuta la función callback resuelve la entrega del resultado y puede ser entregado al cliente en un tiempo muy reducido.
  • Bucle de eventos:
  • ¿Qué se puede hacer con NodeJs?:
    • Generar páginas dinámicas.
    • Crear, abrir, leer, escribir, borrar y cerrar archivos del servidor.
    • Recolectar datos de un formulario.
    • Operaciones transaccionales de base de datos: agregar, modificar, borrar, entre otros.
  • Módulos:
Se incluyen a través de la instrucción: require('nombreModulo').
- Ejemplo:
var http = require('http');
Además, se pueden crear módulos propios usando exports para que las funciones puedan utilizarse fuera del mismo.
exports.myDateTime = function(){
 return Date(); 
};
  • Ejemplos de módulos:
Módulo Descripción
assertProporciona un conjunto de pruebas de aserción
bufferPara manejar datos binarios
child_processPara ejecutar un proceso hijo
clusterPara dividir un solo proceso nodo en múltiples procesos
cryptoPara manejar las funciones criptográficas de OpenSSL
dgramProporciona implementación de sockets de datagramas UDP
dnsPara realizar búsquedas de DNS y funciones de resolución de nombres
domainObsoleto. Para manejar errores no manejados
eventsPara manejar eventos
fsPara manejar el sistema de archivos
httpPara hacer que Node.js actúe como un servidor HTTP
httpsPara hacer que Node.js actúe como un servidor HTTPS
netPara crear servidores y clientes
osProporciona información sobre el sistema operativo
pathPara manejar rutas de archivos
punycodeObsoleto. Un esquema de codificación de caracteres
querystringPara manejar cadenas de consulta de URL
readlinePara manejar flujos legibles una línea a la vez
streamPara manejar la transmisión de datos
string_decoderPara decodificar objetos de búfer en cadenas
timersPara ejecutar una función después de un número dado de milisegundos
tlsImplementar los protocolos TLS y SSL
ttyProporciona clases usadas por un terminal de texto
urlPara analizar cadenas de URL
utilPara acceder a las funciones de utilidad
v8Para acceder a información sobre V8 (el motor de JavaScript)
vmPara compilar código JavaScript en una máquina virtual
zlibPara comprimir o descomprimir archivos
  • Pre-requisitos:
Lo ideal es tener una comprensión básica de JavaScript. Como vamos a desarrollar aplicaciones basadas en la web, se recomienda que entienda otras tecnologías web como HTML, CSS, AJAX, entre otros.



Referencias Bibliográficas:
Node.js: ¿Qué es y para que sirve NodeJS? ¿Simplemente qué es Node.js?What function gets put into EventLoop in NodeJs and JSNode.js Built-in ModulesJavascript a fondoJavaScript VersionsJavaScript HTML DOMQué es el DOMGUÍA DE ESTÁNDARES WEB

Comentarios