如何在运行强大的Javascript时更新DOM?

时间:2013-02-28 02:52:02

标签: javascript javascript-events

我正在编写Javascript,它正在为项目计算一定数量。数量可能在100,000左右,完成处理大约需要10-15秒。 我希望脚本在用户调用页面后立即运行,当脚本完成时,它会执行重定向。 是否可以暂停甚至10ms来更新DOM,以便在运行时提供诸如“仍在工作”之类的反馈?

我想避免使用jQuery,在这种情况下,web-worker不是一个选项。 我意识到这不是一个真实世界的应用程序!

编辑:添加了一些代码作为示例:

头脑中

function myCounter (target) {
    var t = target;
    var count = 0;
    while (t != count){
        if (t == count) {
        window.location.replace("http://example.com"); // redirect
        }
    count++;
    }
}

在体内

<script>myCounter(100000);</script>

1 个答案:

答案 0 :(得分:3)

在大多数浏览器中,JavaScript和UI在同一个线程中运行。您可以使用setTimeout(或setInterval)将该主题返回给浏览器。

var myNumber = 0;
updateNumber();

function updateNumber(){
    // do heavy work for great good, ideally divided into smaller chunks

    document.getElementById('updateDiv').innerHTML = 'still working, up to ' + myNumber;

    if(myNumber < limit) {
      setTimeout(updateNumber, 20);
    }
}

关于一般过程的更多细节,这个答案值得一读:https://stackoverflow.com/a/4575011/194940