在递归中将控制权交还给浏览器

时间:2014-10-07 17:56:00

标签: javascript recursion

我的代码中有以下递归方案,其中从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);
}           

0 个答案:

没有答案