我已经编写了一个javascript来通过javascript帮助模拟HTML中的WPF DockPanel布局行为。
现在,当我开始将这些面板嵌套到10的递归级别时,我遇到了性能问题。奇怪的是,它只不过是普通的递归,并且在最深层次上,所讨论的函数在0.2到2ms之间完成
现在要么我有一些鬼性能损失,还是在调用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引擎。如果你知道它在一个中速度慢但在另一个中速度很快,那么信息也会受到欢迎。我假设它会是一样的。
访问者的包装信息:递归与迭代的影响非常显着。迭代一般都会胜出。
答案 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