Node.js - #4 - Timers - Rodrigo Branas

  • View
    1.330

  • Download
    1

  • Category

    Internet

Preview:

Citation preview

Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.br

Timers

Por meio dos timers, é possível agendar a execução de funções

Criando um timer com setTimeout setTimeout.js

1. console.log('A  '  +  new  Date());  2. setTimeout(function  ()  {  3.    console.log('B  '  +  new  Date());  4. },  3000);

É necessário importar algum módulo para utilizar a função setTimeout?

https://github.com/nodejs/node-v0.x-archive/blob/master/src/node.js

Invertendo a ordem de execução setTimeoutReverse.js

1. setTimeout(function  ()  {  2.    console.log('B  '  +  new  Date());  3. },  3000);  4. console.log('A  '  +  new  Date());

Por que ao inverter a ordem o resultado é o mesmo?

Para evitar o bloqueio do event loop, que é executado em uma única thread, as funções invocadas pelos timers ficam

aguardando em uma fila.

Cancelando um timer com clearTimeout clearTimeout.js

1. var  a  =  setTimeout(function  ()  {  2.    console.log('A  '  +  new  Date());  3. },  3000);  4. var  b  =  setTimeout(function  ()  {  5.    console.log('B  '  +  new  Date());  6. },  3000);  7. clearTimeout(a);

É possível também criar um timer que execute a cada período de tempo

Criando um timer com setTimeout setTimeoutInterval.js

1. var  interval  =  function  (callback,  time)  {  2.    setTimeout(function()  {  3.        callback();  4.        interval(callback,  time);  5.    },  time);  6. };  7. interval(function()  {  8.    console.log('R  '  +  new  Date());  9. },  1000);

Não tem nada mais simples e direto?

Criando um timer com setInterval setInterval.js

1. setInterval(function()  {  2.    console.log('R  '  +  new  Date());  3. },  1000);

Cancelando um timer com clearInterval clearInterval.js

1. var  i  =  setInterval(function()  {  2.    console.log('R  '  +  new  Date());  3. },  1000);  4. setTimeout(function()  {  5.    clearInterval(i);  6. },  5000);

E se a intenção for apenas colocar a função na fila, para executar depois?

Criando um timer imediato setTimeoutZero.js

1. console.log('A  '  +  new  Date());  2. setTimeout(function()  {  3.    console.log('I  '  +  new  Date());  4. },  0);  5. console.log('B  '  +  new  Date());

Não tem nada mais simples e direto?

Criando um timer imediato setImmediate.js

1. console.log('A  '  +  new  Date());  2. setImmediate(function()  {  3.    console.log('I  '  +  new  Date());  4. });  5. console.log('B  '  +  new  Date());

Existe diferença de performance entre o setTimeout e o setImmediate?

Medindo a performance do setTimeout setTimeoutZeroTime.js

1. console.time('T');  2. setTimeout(function()  {  3.    console.timeEnd('T');  4. },  0);

Medindo a performance do setImmediate setImmediateTime.js

1. console.time('I');  2. setImmediate(function()  {  3.    console.timeEnd('I');  4. });

Tem como programar um timer utilizando uma data específica?

Rodrigo Branas  Agile Code: http://www.agilecode.com.br Twitter: @rodrigobranas SlideShare: http://www.slideshare.com/rodrigobranas YouTube: http://www.youtube.com/rodrigobranas LinkedIn: http://br.linkedin.com/in/rodrigobranas +Plus: https://plus.google.com/+RodrigoBranas GitHub: http://www.github.com/rodrigobranas