No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Benchmarking (console time y timeEnd)

26/31
Recursos

Aportes 53

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Benchmark = prueba de rendimiento o comparativa en inglés

La función console.time(‘nombre’) inicia un temporizador que se puede usar para rastrear cuánto tiempo dura una operación. El temporizador sera identificado por el nombre dado a la consola. Ese mismo nombre se utilizara cuando se llame a console.timeEnd(‘nombre’) para detener el temporizador y obtener el tiempo demorado durante el proceso.

console.time("Temporizador");
for (var i = 0; i < 10000; i++) {
  // Nuestro codigo entre los temporizadores puede ser cualquier cosa.
}
console.timeEnd("Temporizador");
<h1>¿Qué es más rápido?</h1>
  • Suma++

  • Suma = Suma + i

let suma = 0;
let suma2 = 0;

console.time('Tiempo bucle');
for (let i = 0; i < 1000; i++) {
    suma++;
}
console.timeEnd('Tiempo bucle')

console.time('Tiempo bucle 2');
for (let j = 0; j < 1000; j++) {
    suma2 = suma2 + j;
}
console.timeEnd('Tiempo bucle 2')```

Respuesta:

Tiempo bucle: 0.268ms
Tiempo bucle 2: 0.055ms

Benchmarking (console time y timeEnd)


Aquí vamos a ver cómo hacer para descubrir de todas tus funciones cuando tienes un proceso largo, cuánto esta tardando en ejecutarse y poder detectar procesos que están tardándose más de lo que deberían.

let suma = 0

console.time('bucle')

for (let i = 0; i < 1000000000; i++) {
    suma += 1
    
}
console.timeEnd('bucle')
  • console.time(*nombre*) → Nos encerrar un bloque de código y después evaluar cuánto tarda en ejecutarse.

Y también puedes trabajar esto con procesos asíncronos.

console.time('bucle async')
console.log('Empieza el proceso asincrono')
asincrona()
    .then(() => console.timeEnd('bucle async'))

function asincrona() {
    return new Promise( resolve => {
        setTimeout( () => {
            console.log('Terimina el proceso asíncrono')
            resolve()
        }, 0)
    })
}

¡Que buen truco!

Bastante aplicable para revisar el tiempo que tarda en peticiones http

Mi forma de hacerlo : P

es genial, aunque hay que tener en cuenta que va depender de la maquina donde corras el codigo

console.time('todo');
let suma = 0;

console.time('bucle1');
for (let i = 0; i < 1000000000; i++) {
    suma++;
}
console.timeEnd('bucle1');

let suma2 = 0;
console.time('bucle2');
for (let i = 0; i < 10000000000; i++) {
    suma2++;
}
console.timeEnd('bucle2');

console.time('asincrona');
console.log('inicia asincrono');
asincrona()
    .then ( () => {
        console.timeEnd('asincrona');
    })


console.timeEnd('todo');


//-------------------

function asincrona() {
    return new Promise ( (resolve) => {
        setTimeout(() => {
            console.log('Termina el proceso asincrono');
            resolve();
        }, 1000);
    })
}

This is my códe!!

console.time('all');
let suma = 600000;

console.time('bucle');
for (let i = 0; i < suma; i++) {
   // console.log(i)
}
console.log(suma)
console.timeEnd('bucle');

console.time('bucle2');
let suma2 =suma*2;
console.log(suma2)
for (let x = 0; x < suma2; x++) {
   // console.log(x)
}
console.timeEnd('bucle2');
console.log('async');
asincrona()
    .then( () => {
        console.timeEnd('async');

    })
console.timeEnd('all');

function asincrona(){
    return new Promise( (resolve, reject) =>{
        setTimeout(() => {
            console.log('Termina el proceso asincrono');
            resolve();
        })
    })
}```

Console.time es una buena herramienta para medir el tiempo de ejecución de nuestro código, pero cabe resaltar que este tiempo es relativo, la velocidad de la cpu, los procesos que pueda estar corriendo entre otros, en el Curso Básico de Algoritmos, más especifico a la clase de Cómo comparar algoritmos y ritmo de crecimiento
se puede adentran mas en el rendimiento de nuestro código.

/* Se puede ejecutar un proceso que pronostique cuanto debe tardarce en ejecutar algo y asi identificar donde hay fallas para corregir y hacer que todo ejecute mas rapido */


/* console.time('todo');
let suma = 0;
console.time('bucle');

for (let i = 0; i < 100000000; i++) {
    suma +=1;
}

console.log(suma);
console.timeEnd('bucle');

let suma2 = 0;
console.time('bucle2');

for (let j = 0; j < 1000000000; j++) {
    suma2 +=1;
}

console.log(suma2);
console.timeEnd('bucle2');
console.timeEnd('todo'); */

/* con las funciones asincronas funciona asi */


console.time('todo');
let suma = 0;
console.time('bucle');

for (let i = 0; i < 100000000; i++) {
    suma +=1;
}

console.log(suma);
console.timeEnd('bucle');

let suma2 = 0;
console.time('bucle2');

for (let j = 0; j < 1000000000; j++) {
    suma2 +=1;
}

console.log(suma2);

console.timeEnd('bucle2');

console.time('asincrono');
asincrona()
    .then(() => {
        console.timeEnd('asincrono');
    });

console.timeEnd('todo');



function asincrona() {
    return new Promise((resolve) => {
        setTimeout(function () {
            console.log('Termina el proceso asincrono')
            resolve();
        },5000)
    })
}

/* Así podemos entender cuando tarda un codigo en ejecutarce esto se conoce como benchmarking */

Console.time es una buena herramienta para medir el tiempo de ejecución de nuestro código, pero cabe resaltar que este tiempo es relativo

Otro truco, usar exponente a los para los nùmeros:

1.000’000.000 === 1e9

let suma = 0;
console.time("bucle");
for (let i = 0; i < 1e9; i++) {
  suma += 1;
}
console.timeEnd("bucle");

A la hora de crear el otro ciclo for, no era necesario cambiar la variable “i” a “j”, porque usó let para declarar la variable, es decir, la variable está en un scope local. Seguro que la mayoría es consciente de esto, pero lo menciono por si alguien no lo había comprendido completamente.

El mejor profesor de Node del mundo.

Que bueno poder saber cuánto le estás exigiendo a tu máquina a la hora de ejecutar un proceso. Estos datos siempre me dan ganas de saber en qué parte o cómo puedo mejorar el código para hacerlo más rápido.

console.time(‘nombre_proceso’)
//tu codigo…

console.timeEnd(‘nombre_proceso’)
Sirve para obtener el tiempo que tarda que en ejecutarse el codigo que esta entre las consolas time

Tambien tenemos disponible console.timeLog, para poder observar el cambio de una variable… https://developer.mozilla.org/en-US/docs/Web/API/Console/timeLog

Estos pequeños trucos hacen la diferencia a la hora de debuggear

Lo he hecho con console.time & console.timeLog

console.time(`All code`);

console.time(`process`)
let sum = 0;
for(i = 0; i < 10; i++ ){
    sum += 1;
}
console.timeLog(`process`, sum);

/* Asincrono */
console.log("Aquí comienza asíncrono");

function startup() {
    return new Promise(
        (resolve, reject)=>{
            setTimeout(() => {
                console.log("Petición 1")
                resolve();
            }, 4000);
        }
    );
}
console.time(`startup`);
startup()
    .then(res => console.timeLog(`startup`))
    .catch(err => console.timeLog(`startup`))

console.timeEnd(`All code`) 

Otro ejemplo con funciones asincronas:

function asynchronous() {
    setTimeout(() => {
        console.log('hey');
        console.timeEnd('async');
    }, 3000);
}

console.time('async');
asynchronous()
console.time('todo');
let suma = 0;

console.time('bucle')

for (let i = 0; i < 1000000000; i++) {
    suma += i;
}

console.log('Listo: ', suma);
console.timeEnd('bucle');

let suma2 = 0;


console.time('bucle2')

for (let j = 0; j < 10000000; j++) {
    suma2 += 1;
}

console.log('Listo: ', suma2);
console.timeEnd('bucle2');

console.time('asincrono')
console.log('Empieza el proceso asincrono');
asincrona()
    .then(() => {
        console.timeEnd('asincrono');
    });



console.timeEnd('todo');


function asincrona() {
    return new Promise((resolve) => {
        setTimeout(function () {
            console.log('Termina el proceso asincrono');
            resolve();
        })
    })
}

Función muy útil a la hora de comprar algoritmos que resuelven algún problema, así podemos saber cual es mejor.

Yo me casaba con python, pero Node y JS me estan convenciendo

Excelente no conocia esta funcion

Benchmarking

Uno de los trucos que nos puede servir es para saber cuanto tiempo tarda la ejecución de alguna función o proceso que se ejecuta, es un método de console y se llama time y timeEnd.

let sum = 0
console.time('cicle')
for (let i = 0; i < 1000000000; i++) {
  sum += 1
}
console.timeEnd('cicle')
/*
Output:
	cicle: 1.608s
*/

Permite saber el tiempo que tarda el ciclo en ejecutarse.

Para utilizarlo con funciones asíncronas, se pueden usar las Promises .

function asyncFunction() {
  return new Promise((resolve) => {
    setTimeout(function () {
      console.log('Termina el proceso asincrono')
      resolve()
    })
  })
}

console.time('asincrono')
asyncFunction().then(() => {
  console.timeEnd('asincrono')
})

/*
Output:
	Termina el proceso asincrono
	asincrono: 2.039ms
*/

Creo que con esto deberían explicar la asincronia de javascript, porque si le pones un setTimeout de 2 segundos al principio, va a tardar realativamente lo mismo a que si lo pones al final, solo que el tiempo final va a ser menor

Muy útil el console.time hace que rastrear peticiones HTTP y en general todo tipo de proceso sea mucho más fácil. ¡Genial!

console.clear();

let suma = 0;
let suma2 = 0;

console.time('suma');
for (let index = 0; index < 10000000; index++) {
    suma += 1;
}
console.timeEnd('suma');


console.time('suma2');
for (let index = 0; index < 10000000; index++) {
    suma2 ++;
}
console.timeEnd('suma2');

Hola a todos, los invito a leer del BigO notation, creo que si enlazamos esta lección y los conceptos del bigO notation, cumpliremos lo que nos dice el profe Leónidas xD el saber un gran truco y aplicarlo en nuestro código.
https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/big-o-notation aquí les dejo este pequeño articulo, obviamente luego de leerlo a realizar ejercicios amigos, con eso comprendemos a fondo la complejidad de nuestro código y además el uso eficiente de recursos, Salu2! 😃

🤯

Entonces los console time y timeEnd nos sirven para saber o medir el rendimiento y la velocidad de ejecución de nuestro código.

Acá les dejo mi aporte: console.time('todo'); *// (B) Para saber cuánto tarda todo tu código al correr, se declara este console al principio y en la parte de abajo con "console.timeEnd('todo')" en la línea 15.*let suma = 0;*// (B) Hay una forma para saber exáctamente cuánto tiempo queda y tarda algo y es con uno de los métodos que no hablamos de CONSOLA en la clase pasada y es que console tiene muchas opciones para poder trabajar con todo lo que se nos ocurre, poder mostrar datos de forma muy inteligente y muy útil; pues tiene un método que es "console.time('bucle')"*console.time('bucle');for (let i = 0; i < 100000000; i++) { *// (B) Dependiendo del número de ceros que le agreguemos va a tardar un poco más o un poco menos.*}*// (B) Una vez que se digita el "console.time('bucle')" que esta en la línea 4, vamos a continuación a escribir por acá este otro console*console.timeEnd('bucle'); *// (B) Al ejecutar este console va imprimir que tardo el bucle: 542.367ms milisegundos y si le quito un cero me va a imprimir: bucle: 51.992ms; pues aquí vemos que tarda bastante menos y lo que estamos viendo es el tiempo real que tarda en ejecutar desde que empieza hasta que termina.// (B) Y por qué es esto tremendamente eficaz? Pues porque no solamente podemos ver cómo se ejecuta un bucle o cómo se ejecuta otro. Imaginate que tenemos 2 bucles y quiero saber cuánto tarda uno y cuánto tarda el otro. Para eso vamos a copear todo el código anterior que está en las líneas 2 y 8, y lo vamos a pegar a continuación y le hacemos los siguientes cambios.*let suma2 = 0;console.time('bucle 2');for (let j = 0; j < 1000000; j++) {    suma2 += 1;}console.timeEnd('bucle 2');*// (B) Al ejecutarse el NODEMON nos imprime que el primer bucle se tardó: 52.285ms y el bucle 2: 1.511ms.// (B) Ahora queremos saber cuánto tardan los 2 bucles en total; para ello nos vamos a la parte inicial del código y en la línea 1 digitamos: "console.time('todo') y luego a continuación digitamos: "console.timeEnd('todo') y el NODEMON nos va a mostrar 3 regultados.* console.time('asincrono'); *// (C) Una vez creada la función ASÍNCRONA en la línea 29, el profe se viene acá y ejecuta este console.*console.log('Empieza el proceso ASYNC'); *// (C) Una vez creado el anterior console.time, se ejecuta este otro console.log; pero con un mensaje.*asincrona() *// (C) Una vez estructurados los dos anteriores "console", se procede a llamar a la función ASÍNCRONA y se genera el código que se observa.*    .then(() => {        console.timeEnd('asincrono');    });console.timeEnd('todo');*// (B) En esta parte del código al ejecutar el NODEMON nos imprime los 3 resultados: |bucle: 52.661ms| |bucle 2: 1.485ms| |todo: 61.711ms|* *// (C) Ahora para las funciones ASINCRONAS para saber cuánto tardan los procesos en ejecutarse desde el comienzo hasta el final, vamos a crear una función con el nombre de ASÍNCRONA.*function asincrona() {    return new Promise((resolve) => {        setTimeout(function() {            console.log('Termina el proceso Asíncrono');            resolve();        }, 1500);    });}*// (C) Al ejecutar el NODE o el NODEMON, nos imprime 6 resultados en cascada de arriba hacia abajo: bucle: 52.086ms, bucle 2: 1.509ms, Empieza el proceso ASYNC, todo: 61.556ms, Termina el proceso Asíncrono, asincrono: 1.501s.*
Acá les dejo mi aporte y resumen de la clase: Bienvenidos a la sección de trucos que no quieren que sepas de **node.js** y es lo que vamos a ver. Son truquitos que normalmente cuesta encontrar y nos van a facilitar mucho la vida cuando vayamos desarrollando. El primero que te voy a contar es cómo hacer para descubrir de todas sus funciones como tienes un proceso largo cuando esta tarde en ejecutarse más o menos y poder detectar procesos que sean mucho más lentos de lo que deberían. Lo primero que vamos a hacer, es ejecutar un proceso que sea medio largo. Vamos a sumar números. **console.time('todo');** *// (B) Para saber cuánto tarda todo tu código al correr, se declara este console al principio y en la parte de abajo con "console.timeEnd('todo')" en la línea 15.* **let suma = 0;** *// (B) Hay una forma para saber exactamente cuánto tiempo queda y tarda algo y es con uno de los métodos que no hablamos de CONSOLA en la clase pasada y es que console tiene muchas opciones para poder trabajar con todo lo que se nos ocurre, poder mostrar datos de forma muy inteligente y muy útil; pues tiene un método que es "console.time('bucle')"* **console.time('bucle');** **for (let i = 0; i < 100000000; i++) {** *// Dependiendo del número de ceros que le agreguemos va a tardar un poco más o un poco menos.* **}** *// (B) Una vez que se digita el "console.time('bucle')" que está en la línea 4, vamos a continuación a escribir por acá este otro console* **console.timeEnd('bucle');** *// (B) Al ejecutar este console va a imprimir que tardo el bucle: 542.367ms milisegundos y si le quito un cero me va a imprimir: bucle: 51.992ms; pues aquí vemos que tarda bastante menos y lo que estamos viendo es el tiempo real que tarda en ejecutar desde que empieza hasta que termina.* *// (B) Y por qué es esto tremendamente eficaz? Pues porque no solamente podemos ver cómo se ejecuta un bucle o cómo se ejecuta otro. Imagínate que tenemos 2 bucles y quiero saber cuánto tarda uno y cuánto tarda el otro. Para eso vamos a copear todo el código anterior que está en las líneas 2 y 8, y lo vamos a pegar a continuación y le hacemos los siguientes cambios.* **let suma2 = 0;** **console.time('bucle 2');** **for (let j = 0; j < 1000000; j++) {** **suma2 += 1;** **}** **console.timeEnd('bucle 2');** *// (B) Al ejecutarse el NODEMON nos imprime que el primer bucle se tardó: 52.285ms y el bucle 2: 1.511ms.* *// (B) Ahora queremos saber cuánto tardan los 2 bucles en total; para ello nos vamos a la parte inicial del código y en la línea 1 digitamos: "console.time('todo') y luego a continuación digitamos: "console.timeEnd('todo') y el NODEMON nos va a mostrar 3 regultados.* **console.timeEnd('todo');** *// (B) En esta parte del código al ejecutar el NODEMON nos imprime los 3 resultados: |bucle: 52.661ms| |bucle 2: 1.485ms| |todo: 61.711ms|* **console.time('asincrono');** *// (C) Una vez creada la función ASÍNCRONA en la línea 29, el profe se viene acá y ejecuta este console.* **console.log('Empieza el proceso ASYNC');** *// (C) Una vez creado el anterior console.time, se ejecuta este otro console.log; pero con un mensaje.* **asincrona()** *// (C) Una vez estructurados los dos anteriores "console", se procede a llamar a la función ASÍNCRONA y se genera el código que se observa.* .**then(() => {** **console.timeEnd('asincrono');** **});** *// (C) Al ejecutar el NODE o el NODEMON, nos imprime 6 resultados en cascada de arriba hacia abajo:* bucle: 52.086ms bucle 2: 1.509ms Empieza el proceso ASYNC todo: 61.556ms Termina el proceso Asíncrono asincrono: 1.501s
Hace un tiempo conocí este truco en JS, y desde ese entonces siempre que puedo reviso estos tiempos y puedo hacer de alguna forma mas eficiente el código y saber aproximadamente cuando cargaría.
Aqui un ejemplo con el algoritmo de Busqueda binaria (Recursivo VS Iterativo) ![](https://static.platzi.com/media/user_upload/image-40f4b958-c80f-4cab-9a3f-56d8ea462709.jpg) Alerta de spoiler: ![](https://static.platzi.com/media/user_upload/image-8f77fc1c-44d2-4f3c-9292-845063dcb7a2.jpg)
Es importante tener en cuenta que `console.time()` y `console.timeEnd()` pueden no ser las herramientas más precisas para realizar benchmarking en entornos de producción debido a su precisión limitada y a posibles variaciones en el rendimiento del sistema. Para un benchmarking más avanzado y preciso, es posible que desees considerar el uso de herramientas específicas de benchmarking o bibliotecas de prueba de rendimiento en Node.js.

De lujo Homero

Bart Simpson

no es necesario cambiar el nombre de esa variable que usa para iterar en ciclo for.

¡Hola tú! Si quieres añadirle un poco más de personalización para realizar Benckmarking con node.js, te invito a echarle un vistazo al siguiente tutorial:
Usando colores en nuestras aplicaciones de NodeJS


// Benchmarking Console 

// Es importante gestionar el tiempo que utiliza cada funcion, Para mejorar el performance y los tiempos de carga.
// Console.time, inicia un tiempo x
// console.timeEnd termina el tiempo y lo muestra.
let suma = 0;

console.log('the asynco starts')
console.time('bucle');
console.time('bucle2');
console.time('Asynco');
for(let i = 0; i < 1000000; i++){
    suma += 1;
}
console.timeEnd('bucle');

let suma2 = 0;
for(let i = 0; i < 1000000; i++){
    suma2 += 1;
}
console.timeEnd('bucle2');

function asynco() {
    return new Promise( (resolve) => {
        setTimeout((function () {
            console.log('the process was finished')
            return resolve();
        }))
    })
}

asynco()
    .then(() => {
        console.timeEnd('Asynco')
    })

console.time('cualquierNombre') crea un temporizador que puede ser utilizado para calcular cuánto puede estar demorando un proceso. Este temporizador será identificado por 'cualquierNombre' ingresado inicialmente. Este mismo nombre será utilizado para llamar a console.timeEnd('cualquierNombre') para obtener el tiempo total.

console.time(“nombre del bloque”)
console.timeEnd(“nombre del bloque”)

Una de las preguntas que me hacia!! wow y con el console.log!!!

Buena clase!

metricas importantes para validar el rendimiento de los procesos!

Esto tiene que ver con métricas?

Genial

Esto es súper útil

console.time

This is my code!

Excelente!

Genial.
Que trucaso 😉