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

Node.js - #4 - Timers - Rodrigo Branas

  • 1.
    Rodrigo Branas –@rodrigobranas - http://www.agilecode.com.br Timers
  • 2.
    Por meio dostimers, é possível agendar a execução de funções
  • 3.
    Criando um timercom setTimeout setTimeout.js 1. console.log('A  '  +  new  Date());   2. setTimeout(function  ()  {   3.    console.log('B  '  +  new  Date());   4. },  3000);
  • 5.
    É necessário importaralgum módulo para utilizar a função setTimeout?
  • 6.
  • 8.
    Invertendo a ordemde execução setTimeoutReverse.js 1. setTimeout(function  ()  {   2.    console.log('B  '  +  new  Date());   3. },  3000);   4. console.log('A  '  +  new  Date());
  • 10.
    Por que aoinverter a ordem o resultado é o mesmo?
  • 11.
    Para evitar obloqueio do event loop, que é executado em uma única thread, as funções invocadas pelos timers ficam aguardando em uma fila.
  • 13.
    Cancelando um timercom 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);
  • 15.
    É possível tambémcriar um timer que execute a cada período de tempo
  • 16.
    Criando um timercom 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);
  • 18.
    Não tem nadamais simples e direto?
  • 19.
    Criando um timercom setInterval setInterval.js 1. setInterval(function()  {   2.    console.log('R  '  +  new  Date());   3. },  1000);
  • 21.
    Cancelando um timercom clearInterval clearInterval.js 1. var  i  =  setInterval(function()  {   2.    console.log('R  '  +  new  Date());   3. },  1000);   4. setTimeout(function()  {   5.    clearInterval(i);   6. },  5000);
  • 23.
    E se aintenção for apenas colocar a função na fila, para executar depois?
  • 24.
    Criando um timerimediato 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());
  • 26.
    Não tem nadamais simples e direto?
  • 27.
    Criando um timerimediato setImmediate.js 1. console.log('A  '  +  new  Date());   2. setImmediate(function()  {   3.    console.log('I  '  +  new  Date());   4. });   5. console.log('B  '  +  new  Date());
  • 29.
    Existe diferença deperformance entre o setTimeout e o setImmediate?
  • 30.
    Medindo a performancedo setTimeout setTimeoutZeroTime.js 1. console.time('T');   2. setTimeout(function()  {   3.    console.timeEnd('T');   4. },  0);
  • 32.
    Medindo a performancedo setImmediate setImmediateTime.js 1. console.time('I');   2. setImmediate(function()  {   3.    console.timeEnd('I');   4. });
  • 34.
    Tem como programarum timer utilizando uma data específica?
  • 37.
    Rodrigo Branas   AgileCode: 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