Alb*_*ber 11 javascript arrays memory-management node.js
这是进行大量条目的代码的一部分(最初它与文件系统一起工作并对文件进行一些操作).是否有任何好方法可以绕过限制并防止抛出RangeError:超出最大调用堆栈大小 (现在它允许我迭代大约3000个项目)
var async = require('async')
    , _u = require('underscore')
var tifPreview = function (item, callback) {
    console.log(item)
    return callback();
}
var tifQueue = async.queue(tifPreview, 2)
tifQueue.push(_u.range(0, 5000, 1))
bev*_*qua 23
一个选项可能会传递--max-stack-size给node.
node --max-stack-size 32000 app.js
供参考,请使用 node -h
--max-stack-size=val设置最大v8堆栈大小(字节)
即使帮助打印出来--max-stack-size,在node -v v0.10.x+中你需要使用--stack-size.
node --stack-size=32000 app.js
Lin*_*äck 23
问题是你正在进行许多函数调用.将stack-size值设置为更高的值只会增加您可以处理的项目数,而不是解决实际问题.
您正在从函数中直接调用下一个迭代,这使它成为递归函数.这是有点难以发现,因为它正在通过async.
这段代码应该有效:
var tifPreview = function (item, callback) {
  console.log(item);
  // defer the callback
  setImmediate(callback);
}
在setImmediate此处阅读有关此功能的更多信息:http:
 //nodejs.org/api/timers.html#timers_setimmediate_callback_arg
| 归档时间: | 
 | 
| 查看次数: | 15999 次 | 
| 最近记录: |