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

时间:2014-07-23 16:00:30

标签: javascript performance recursion

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

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

Profiler Image

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

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

我已经阅读了SO-Recursive function calling in JavaScript关于这一点,但这是否真的意味着我可能必须接受recursiondepth n = functioncost *(10 ^(n-1))我会去的每个递归深度?

此外(这反驳了递归的想法比迭代慢)SO - Is iteration faster than recursion, or just less prone to stack overflows?

这个Programmers: Performance: recursion vs. iteration in Javascript代表迭代的速度比递归4倍(叹息......)

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

访问者的包装信息:递归与迭代的影响非常显着。迭代一般都会胜出。

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

1 个答案:

答案 0 :(得分: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'

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