我的代码中有以下递归方案,其中从for循环中调用递归函数:
var recursiveFn = function(node, handlers) {
....
for (i = node.firstChild; i; i = recursiveFn(i, handlers)) {}
return node.nextSibling;
...
};
for (var i = 0; i < node.childNodes.length; i++){
recursiveFn(node.childNodes[i], true);
}
此代码通常会导致IE的性能降低,有时IE会长时间运行脚本问题。
将控制权交还给浏览器并避免此错误的最佳方法是什么?我正在考虑使用一个计数器来跟踪递归函数运行的次数,然后在100次迭代后让浏览器中断:
var cnt = 0;
var recursiveFn = function(node, handlers) {
cnt++;
....
for (i = node.firstChild; ; ;) {
if (cnt >=100) { // If recursive function has run 100 times , give breather to browser
setTimeout(function(){i = recursiveFn(i,handlers)}, 100);
}else {
i = recursiveFn(i, handlers);
}
}
return node.nextSibling;
...
};
for (var i = 0; i < node.childNodes.length; i++){
recursiveFn(node.childNodes[i], true);
}