Node.js - #4 - Timers - Rodrigo Branas
-
Upload
rodrigo-branas -
Category
Internet
-
view
1.330 -
download
1
Transcript of Node.js - #4 - Timers - Rodrigo Branas
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