定期recursion调用函数

所以我想知道什么是更好的方式(在堆栈增长和性能方面)以recursion方式定期调用一个函数? 例如,假设我想每200毫秒读取文件内容。 我有以下两种方法,并想知道他们是否有什么不同?

方法1:使用普通的ols setTimeout没有process.nextTick

var fs = require('fs'); (function loop() { // Print to time to indicate something is happening console.log(new Date().toString()); // Read a 51MB file fs.readFile('./testfile', function (err, data) { if (err) console.log(err); }); // Call the same function again setTimeout(function () { loop(); }, 200); })(); 

方法2:调用setTimeout中的process.nextTick

 var fs = require('fs'); (function loop() { // Print to time to indicate something is happening console.log(new Date().toString()); // Read a 51MB file fs.readFile('./testfile', function (err, data) { if (err) console.log(err); }); // Call the same function again setTimeout(function () { process.nextTick(function () { loop(); }); }, 200); })(); 

我想知道的是,在setTimeout中添加process.nextTick是否有帮助? 调用process.nextTick中的函数是否会缓解堆栈使用情况?

以下简化示例中没有recursion:

 function test() { console.trace(); setTimeout(test, 1000); } test(); 

输出(注意堆栈不增长)

 Trace at test (/private/tmp/rec.js:3:12) at Object.<anonymous> (/private/tmp/rec.js:7:1) at Module._compile (module.js:449:26) at Object..js (module.js:467:10) at Module.load (module.js:356:32) at Function._load (module.js:312:12) at module.js:487:10 at EventEmitter._tickCallback (node.js:238:9) Trace at Object.test [as _onTimeout] (/private/tmp/rec.js:3:12) at Timer.ontimeout (timers.js:101:19) Trace at Object.test [as _onTimeout] (/private/tmp/rec.js:3:12) at Timer.ontimeout (timers.js:101:19) Trace at Object.test [as _onTimeout] (/private/tmp/rec.js:3:12) at Timer.ontimeout (timers.js:101:19) Trace at Object.test [as _onTimeout] (/private/tmp/rec.js:3:12) at Timer.ontimeout (timers.js:101:19) Trace at Object.test [as _onTimeout] (/private/tmp/rec.js:3:12) at Timer.ontimeout (timers.js:101:19) Trace at Object.test [as _onTimeout] (/private/tmp/rec.js:3:12) at Timer.ontimeout (timers.js:101:19)