我正在编写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>
答案 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