我正在尝试编写一些执行大量计算的脚本。因此,我想通过更新网站上的内容(例如,已完成计算的一部分)来通知用户进度。可以用 JavaScript 实现吗?JavaScript 是否允许在调用的函数仍在运行时更新内容?或者无论在什么情况下,我只能在调用函数完成后更新内容?
问问题
115 次
5 回答
3
看看工人:http ://www.html5rocks.com/en/tutorials/workers/basics/
它是为大量计算而设计的(在 javascript 规模 ofc 上),并带有一些用于更新用户计算状态的功能,它基本上是 javascript 中的多线程。
于 2013-07-16T07:26:36.010 回答
2
于 2013-07-16T07:27:32.090 回答
0
当你的函数运行时,不会发生屏幕更新:UI 线程必须像任何其他 JS 线程一样争取时间。您可以通过安排回调来做到这一点:
function f() {
a();
// update now
b();
}
可以改写为
function f() {
a();
setTimeout(function() {
b();
}, 0);
}
这个工作方式,之后a()
,setTimeout
将安排函数的其余部分,然后退出。这是 UI 线程现在可以(并且将会)获取控制权的地方;然后在完成后,将执行预定的剩余部分。
如果你有符合(相当严格的)WebWorker 限制的事情,你可以使用它们来代替;但是,它们不能触摸 UI,因此重绘将毫无意义(除非您按照 Antoine 所说的那样做,并根据 WebWorker 计算的参数安排更新功能)。
于 2013-07-16T07:26:48.273 回答
0
我的几分钱:
最简单的解决方法是简单地显示繁忙动画的最常见方法。
尝试将您的重量级计算代码分解并更新进度条。
或者按照Antoine的建议,尝试使用Web Workers。
于 2013-07-16T07:31:50.357 回答