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

Node.js - #4 - Timers - Rodrigo Branas

Embed Size (px)

Citation preview

Page 1: Node.js - #4 - Timers - Rodrigo Branas

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

Timers

Page 2: Node.js - #4 - Timers - Rodrigo Branas

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

Page 3: Node.js - #4 - Timers - Rodrigo Branas

Criando um timer com setTimeout setTimeout.js

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

Page 4: Node.js - #4 - Timers - Rodrigo Branas
Page 5: Node.js - #4 - Timers - Rodrigo Branas

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

Page 6: Node.js - #4 - Timers - Rodrigo Branas

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

Page 7: Node.js - #4 - Timers - Rodrigo Branas
Page 8: Node.js - #4 - Timers - Rodrigo Branas

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());

Page 9: Node.js - #4 - Timers - Rodrigo Branas
Page 10: Node.js - #4 - Timers - Rodrigo Branas

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

Page 11: Node.js - #4 - Timers - Rodrigo Branas

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

aguardando em uma fila.

Page 12: Node.js - #4 - Timers - Rodrigo Branas
Page 13: Node.js - #4 - Timers - Rodrigo Branas

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);

Page 14: Node.js - #4 - Timers - Rodrigo Branas
Page 15: Node.js - #4 - Timers - Rodrigo Branas

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

Page 16: Node.js - #4 - Timers - Rodrigo Branas

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);

Page 17: Node.js - #4 - Timers - Rodrigo Branas
Page 18: Node.js - #4 - Timers - Rodrigo Branas

Não tem nada mais simples e direto?

Page 19: Node.js - #4 - Timers - Rodrigo Branas

Criando um timer com setInterval setInterval.js

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

Page 20: Node.js - #4 - Timers - Rodrigo Branas
Page 21: Node.js - #4 - Timers - Rodrigo Branas

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);

Page 22: Node.js - #4 - Timers - Rodrigo Branas
Page 23: Node.js - #4 - Timers - Rodrigo Branas

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

Page 24: Node.js - #4 - Timers - Rodrigo Branas

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());

Page 25: Node.js - #4 - Timers - Rodrigo Branas
Page 26: Node.js - #4 - Timers - Rodrigo Branas

Não tem nada mais simples e direto?

Page 27: Node.js - #4 - Timers - Rodrigo Branas

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());

Page 28: Node.js - #4 - Timers - Rodrigo Branas
Page 29: Node.js - #4 - Timers - Rodrigo Branas

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

Page 30: Node.js - #4 - Timers - Rodrigo Branas

Medindo a performance do setTimeout setTimeoutZeroTime.js

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

Page 31: Node.js - #4 - Timers - Rodrigo Branas
Page 32: Node.js - #4 - Timers - Rodrigo Branas

Medindo a performance do setImmediate setImmediateTime.js

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

Page 33: Node.js - #4 - Timers - Rodrigo Branas
Page 34: Node.js - #4 - Timers - Rodrigo Branas

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

Page 35: Node.js - #4 - Timers - Rodrigo Branas
Page 36: Node.js - #4 - Timers - Rodrigo Branas
Page 37: Node.js - #4 - Timers - Rodrigo Branas

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