javascript性能是否受到深度递归的影响?

Dbl*_*Dbl 1 javascript recursion performance

我已经编写了一个javascript来通过javascript帮助模拟HTML中的WPF DockPanel布局行为.

现在,当我开始将这些面板嵌套到递归级别10时,我遇到了性能问题.奇怪的是,它只不过是普通的递归,并且在最深层次上,所讨论的函数在0.2到2ms之间完成.

Profiler图片

现在要么我有一些鬼性能损失,还是在调用javascript的递归时有大量成本?我希望你们其中一个人知道.

如果有成本,显而易见的解决方案将是递归展开,这将是相当悲伤的.

我已经在JavaScript中阅读了SO-Recursive函数调用在此,但这是否真的意味着我可能必须接受recursiondepth n = functioncost*(10 ^(n-1))我会去的每个递归深度?

此外(这反驳了递归比迭代慢的想法)SO - 迭代比递归更快,还是更不容易出现堆栈溢出?

而这个程序员:性能:Javascript中的递归与迭代,它说迭代比递归的速度快4倍(叹息......)

这是一个普遍的问题,独立于浏览器JS引擎.如果你知道它在一个中速度慢但在另一个中速度很快,那么信息也会受到欢迎.我假设它总是一样的.

访问者的包装信息:递归与迭代的影响非常显着.迭代一般胜利.

  • 因子FF30:5~
  • 因素Chrome 36:40~
  • 因子Native IE8,WinXP:10~

mic*_*nic 5

是的,递归对JavaScript的性能有很大的影响,总是避免它,只使用迭代方法

斐波纳契函数的一个简单例子(递归与循环):

http://jsperf.com/fibonacci-recursive-or-iterative/4

我前一段时间写的另一个例子(对象导航):

http://jsperf.com/object-navigation

var a = {
    b: {
        c: 'd'
    }
};

find(a, 'b/c'); // => 'd'
Run Code Online (Sandbox Code Playgroud)

OP-Test:http://jsperf.com/iterative-vs-recursive-method-invocation/3