JavaScript中一次函数调用期间的多个更新
我正在写一些脚本,执行相当繁重的计算。因此,我希望通过更新网站上的内容(例如,已完成计算的分数)来通知用户进度。可以用JavaScript实现吗?JavaScript是否允许在调用的函数仍在运行时更新内容?或者,无论在什么情况下,我都只能在调用的函数完成后更新内容?看看workers: 它是为繁重的计算而设计的(在javascript级别ofc),并带有一些函数来更新用户关于计算状态的信息,它基本上是用javascript进行多线程处理的。看看workers:JavaScript中一次函数调用期间的多个更新,javascript,Javascript,我正在写一些脚本,执行相当繁重的计算。因此,我希望通过更新网站上的内容(例如,已完成计算的分数)来通知用户进度。可以用JavaScript实现吗?JavaScript是否允许在调用的函数仍在运行时更新内容?或者,无论在什么情况下,我都只能在调用的函数完成后更新内容?看看workers: 它是为繁重的计算而设计的(在javascript级别ofc),并带有一些函数来更新用户关于计算状态的信息,它基本上是用javascript进行多线程处理的。看看workers: 它是为繁重的计算而设计的(在jav
它是为繁重的计算而设计的(在javascript级别ofc),并带有一些函数来更新用户关于计算状态的信息,基本上是javascript中的多线程。当您的函数运行时,不会发生屏幕更新:UI线程必须像任何其他JS线程一样争取时间。您可以通过安排回调来实现这一点:
function f() {
a();
// update now
b();
}
可以重写为
function f() {
a();
setTimeout(function() {
b();
}, 0);
}
按照这种方式,在a()
之后,setTimeout
将安排函数的其余部分,然后退出。这就是UI线程现在可以(并且将)抓住控制权的地方;然后在完成后,将执行计划的剩余部分
如果你需要做的事情符合(相当严格的)WebWorker限制,你可以使用它们;但是,它们不能触摸UI,因此重绘将毫无意义(除非您按照Antoine所说的那样做,并根据WebWorker计算的参数安排更新函数)。当您的函数运行时,不会发生屏幕更新:UI线程必须像任何其他JS线程一样争取时间。您可以通过安排回调来实现这一点:
function f() {
a();
// update now
b();
}
可以重写为
function f() {
a();
setTimeout(function() {
b();
}, 0);
}
按照这种方式,在a()
之后,setTimeout
将安排函数的其余部分,然后退出。这就是UI线程现在可以(并且将)抓住控制权的地方;然后在完成后,将执行计划的剩余部分
如果你需要做的事情符合(相当严格的)WebWorker限制,你可以使用它们;但是,它们不能触及UI,因此重画将毫无意义(除非您按照Antoine所说的那样做,并根据WebWorker计算的参数安排更新功能)。使用
从计算函数中,更新全局变量
然后从主线程使用setTimeout()
或setInterval()
定期查询全局值并更新屏幕。使用
从计算函数中,更新全局变量
然后从主线程使用
setTimeout()
或setInterval()
定期查询全局值并更新屏幕。是的,可能您可以这样做。我不知道您的问题的所有细节,但您应该以异步和异步为目标
使用node.js您可以实时向客户端发送进程状态,并通过客户端上的socket.io捕获服务器响应。是的,也许您可以这样做。我不知道您的问题的所有细节,但您应该以异步和异步为目标 使用node.js您可以实时向客户端发送进程状态,并通过客户端的socket.io捕获服务器响应。我的几分钱:
- 最简单的解决方法是最常见的简单方法 显示繁忙的动画
- 尝试将您的重量级计算代码拆分并更新 进度条
- 或者按照安托万的建议,尝试使用
- 最简单的解决方法是最常见的简单方法 显示繁忙的动画
- 尝试将您的重量级计算代码拆分并更新 进度条
- 或者按照安托万的建议,尝试使用
- 我的几分钱: