在 PhantomJS 中,函数调用堆栈限制是多少?
In PhantomJS, what is the function call stack limit?
在突破 PhantomJS javascript 引擎的调用堆栈限制之前,函数可以递归调用多少次?换句话说,这里为 PhantomJS 打印的最后可能 n
是什么:
var n = 0;
function f() {
console.log(++n);
f();
}
f();
我在我的 PC 和我的 Raspberry Pi 1 运行 Raspbian.
的不同 PhantomJS 版本中使用了你的代码 运行
Platform | Version | Maximum callstack
--------------------------------------
Win 8.1 | 2.0.0 | 65277
Win 8.1 | 1.9.8 | 65534
Win 8.1 | 1.9.7 | 65534
Win 8.1 | 1.9.0 | 65534
Win 8.1 | 1.8.2 | 65534
RPi 1 | 2.0.1* | 43547
RPi 1 | 1.9.7 | 65534
RPi 1 | 1.9.0 | 65534
* 开发版编译于 2015 年 3 月 13 日 Raspberry Pi 2
下面是一个更真实的代码示例,因为您很少在 PhantomJS 脚本或页面上使用同步和递归代码。
var n = 0;
function f() {
console.log(++n);
//f();
setTimeout(f, 0);
}
f();
这个更容易被使用的异步版本没有明显的调用堆栈限制。在大约 300,000 次迭代(52 分钟)后,我停止了该过程(Win 8.1 上的 v1.9.8 和 v2.0.0)。版本 1.9.8 始终占用 27.2 MB 内存,而 v2.0.0 在 运行8 到 10 MB 内存的范围内跳跃。
在突破 PhantomJS javascript 引擎的调用堆栈限制之前,函数可以递归调用多少次?换句话说,这里为 PhantomJS 打印的最后可能 n
是什么:
var n = 0;
function f() {
console.log(++n);
f();
}
f();
我在我的 PC 和我的 Raspberry Pi 1 运行 Raspbian.
的不同 PhantomJS 版本中使用了你的代码 运行Platform | Version | Maximum callstack -------------------------------------- Win 8.1 | 2.0.0 | 65277 Win 8.1 | 1.9.8 | 65534 Win 8.1 | 1.9.7 | 65534 Win 8.1 | 1.9.0 | 65534 Win 8.1 | 1.8.2 | 65534 RPi 1 | 2.0.1* | 43547 RPi 1 | 1.9.7 | 65534 RPi 1 | 1.9.0 | 65534
* 开发版编译于 2015 年 3 月 13 日 Raspberry Pi 2
下面是一个更真实的代码示例,因为您很少在 PhantomJS 脚本或页面上使用同步和递归代码。
var n = 0;
function f() {
console.log(++n);
//f();
setTimeout(f, 0);
}
f();
这个更容易被使用的异步版本没有明显的调用堆栈限制。在大约 300,000 次迭代(52 分钟)后,我停止了该过程(Win 8.1 上的 v1.9.8 和 v2.0.0)。版本 1.9.8 始终占用 27.2 MB 内存,而 v2.0.0 在 运行8 到 10 MB 内存的范围内跳跃。