使用setTimeout绕过IE的长时间运行脚本警告

Jos*_*iah 4 javascript internet-explorer settimeout

我之前已经问过这个问题了,并且在网上找到了一些关于这个主题的文章,但对于我的生活,我无法弄清楚这一点.我有一组计算模型的Javascript函数,但是有大量的循环使脚本需要一段时间(~4秒).我不介意处理时间,但IE提示警告,因为有太多的执行.

我已经尝试优化我的代码,但我根本无法减少足以绕过IE警告的执行次数.因此,我认为我必须使用setTimeout函数来重置IE中的计数器.

代码很长,我无法弄清楚如何在IE中正确实现setTimeout.我试过模仿这里找到的代码,但由于某种原因,它在第100次迭代后最终崩溃.

我不知道这是否很常见,但如果我发送给他们,有人会介意看一下代码吗?我只是不想在这里发布它,因为它非常冗长.

谢谢!

编辑: 我已经将我的代码放在JSfiddle上,正如一些人所建议的那样.你可以在这里找到它.感谢您的建议,如果有任何问题请告诉我!

Che*_*eso 6

我使用的基本方法是将工作分成批次.每批都在一个"纪元"中完成,在批处理完成时,它调用setTimeout()来启动下一个纪元.

假设您有1000次迭代运行; 你可以把它分成100个批次.

function doTheWork(operation, cycles, callback) {
    var self = this, // in case you need it
        cyclesComplete = 0,
        batchSize = 100;

    var doOneBatch = function() {
        var c = 0;
        while(cyclesComplete < cycles) {
            operation();
            c++;
            if(c >= batchSize) {
                // may need to store interim results here
                break;
            }
            cyclesComplete++;
        }
        if (cyclesComplete < cycles) {
            setTimeout(doOneBatch, 1);
        }
        else {
            callback(); // maybe pass results here
        }
    };

    // kickoff
    doOneBatch();
    return null;
};
Run Code Online (Sandbox Code Playgroud)