node.js 递归读取大文件的问题

Feb 05, 2018 JavaScript, node.js https://git.io/vAk6O

来自:https://www.v2ex.com/t/423427

  1. 能用循环做的事情就不要用递归,递归相比循环有相当大的性能差距。

  2. node.js 只有特定几个版本有尾递归优化,而且需要 flag 来开启,最新版本是没有的( http://node.green/ ),函数调用的 Maximum call stack size 就是一个一万多的值。另外,ES6 里的尾递归优化是需要有 return 才可以的。

  3. 大文件读取尽量用 Stream,可以指定分块的长度,而且不会一直阻塞 event loop.

  4. 如果一定要用递归才能实现的逻辑,通过 setTimeout(func, 0)setImmediate(func)、或者 process.nextTick(func) 把把递归的深度从 call stack 转移到 task queue.

  5. 另外代码优化相关的,能在循环外通过局部变量存起来的值就不用在循环里用函数调用去读取。