限制 NodeJS 中的递归深度
Limiting Recursion Depth in NodeJS
除了 --stack-size
选项之外,还有其他方法可以限制 NodeJS 中递归的 深度 吗?
我知道 NodeJS 可以让您通过 --stack-size
选项控制调用堆栈的大小。即像这样的程序
const recurse = (num=0) => {
context.num++
recurse(++num)
}
const context = {
num:0
}
try {
recurse(context)
} catch(e) {
console.log('Took ' + context.num + ' trips before bailing')
}
默认会输出类似这样的内容。
$ node so.js
Took 12530 trips before bailing
但是,您可以使用 --stack-size
告诉节点您希望在退出之前让堆栈达到多大(以 kb 为单位)。使用更大的堆栈,你会得到更多的递归。
$ node --stack-size=5000 so.js
Took 63935 trips before bailing
--stack-size
选项是 Node 的 V8 选项之一。您可以通过 运行 node --v8-options
.
查看所有这些选项的列表
我想知道的是 NodeJS 中是否有一种方法可以通过某个特定数字显式限制递归深度。
我在这里没有具体的最终目标——我只是想了解与我使用的其他语言相比,NodeJS 有哪些工具,没有哪些工具。如果 node 没有也没关系'没有这个 - 我只是在这里学习 :)
根据我所做的研究,这似乎是不可能的。 NodeJS 存储库中的 This just opened feature request 可能有助于弄清事情的真相。
除了 --stack-size
选项之外,还有其他方法可以限制 NodeJS 中递归的 深度 吗?
我知道 NodeJS 可以让您通过 --stack-size
选项控制调用堆栈的大小。即像这样的程序
const recurse = (num=0) => {
context.num++
recurse(++num)
}
const context = {
num:0
}
try {
recurse(context)
} catch(e) {
console.log('Took ' + context.num + ' trips before bailing')
}
默认会输出类似这样的内容。
$ node so.js
Took 12530 trips before bailing
但是,您可以使用 --stack-size
告诉节点您希望在退出之前让堆栈达到多大(以 kb 为单位)。使用更大的堆栈,你会得到更多的递归。
$ node --stack-size=5000 so.js
Took 63935 trips before bailing
--stack-size
选项是 Node 的 V8 选项之一。您可以通过 运行 node --v8-options
.
我想知道的是 NodeJS 中是否有一种方法可以通过某个特定数字显式限制递归深度。
我在这里没有具体的最终目标——我只是想了解与我使用的其他语言相比,NodeJS 有哪些工具,没有哪些工具。如果 node 没有也没关系'没有这个 - 我只是在这里学习 :)
根据我所做的研究,这似乎是不可能的。 NodeJS 存储库中的 This just opened feature request 可能有助于弄清事情的真相。