Parte II
function funcion1(x) {
x = x * 2;
console.log('funcion1 => ' + x)
return x;
}
function funcion2(x) {
x = x + 100;
console.log('funcion2 => ' + x);
return funcion3(x);
}
function funcion3(x) {
x = x / 3;
console.log('funcion3 => ' + x);
return x;
}
function funcion4(x) {
x = x * 4;
console.log('funcion4 => ' + x)
return x;
}
function main() {
var x = 10;
x = funcion1(x);
x = funcion2(x);
x = funcion4(x);
}
main();
¿Qué saldrá en la consola del navegador?
Ejecuta el código aquí:
https://repl.it/CLwS/0
funcion1
funcion2
funcion3
funcion4
Resultado:
funcion1 => 20
funcion2 => 120
funcion3 => 40
funcion4 => 160
Gran parte del tiempo de las operaciones que realiza un programa en su ejecución se pierde
esperando
Para aprovechar la CPU, cuando un proceso debe esperar, dicho proceso se bloquea y otro toma su lugar (ejecución concurrente).
Cuando llega la señal de que la espera (operación) ha terminado, el proceso se reanuda.
Desde el punto de vista de un programa, cuando la llamada a una función que realiza una operación termina, la operación se ha completado.
Implícitamente, significa que nuestro programa ha estado esperado a que dicha operación terminase.
Debido a que la terminación de la operación y la reanudación del programa ocurren a la vez, se dice que estamos realizando llamadas síncronas.
La alternativa a esperar es...
no esperar
function funcion1(x) {
x = x * 2;
console.log('funcion1 => ' + x)
return x;
}
function funcion2(x) {
x = x + 100;
console.log('funcion2 => ' + x);
return funcion3(x);
}
function funcion3(x) {
setTimeout(function () {
x = x / 3;
console.log('funcion3 => ' + x);
}, 1000);
return x;
}
function funcion4(x) {
x = x * 4;
console.log('funcion4 => ' + x)
return x;
}
function main() {
var x = 10;
x = funcion1(x);
x = funcion2(x);
x = funcion4(x);
}
main();
funcion1 => 20
funcion2 => 120
funcion4 => 480
funcion3 => 40
Resultado:
function funcion1(x) {
x = x * 2;
console.log('funcion1 => ' + x)
return x;
}
function funcion2(x) {
x = x + 100;
console.log('funcion2 => ' + x);
return funcion3(x);
}
function funcion3(x) {
var def = $.Deferred();
setTimeout(function () {
x = x / 3;
console.log('funcion3 => ' + x);
def.resolve(x);
}, 1000);
return def;
}
function funcion4(x) {
x = x * 4;
console.log('funcion4 => ' + x)
return x;
}
function main() {
var x = 10;
x = funcion1(x);
var deferred = funcion2(x);
deferred.then(funcion4);
}
main();
funcion1 => 20
funcion2 => 120
funcion3 => 40
funcion4 => 160
Resultado:
(Asynchronous JavaScript And XML)
$.ajax('http://api.icndb.com/jokes/random', {
type: 'GET',
success: function(data) {
// your code
}
});
$.get('http://api.icndb.com/jokes/random', function(data) {
// your code
});
Llamada síncrona a la ICNDb
(Internet Chuck Norris Database)
$.ajax({
type: 'GET',
url: 'http://api.icndb.com/jokes/random',
async: false,
success: function (data) {
if (data.type === 'success') {
// TODO
}
}
});
Llamada asíncrona a la ICNDb
(Internet Chuck Norris Database)
$.get('http://api.icndb.com/jokes/random', function (data) {
if (data.type === 'success') {
// TODO
}
});