JavaScript中的一个函数调用期间的多个更新

时间:2013-07-16 07:24:22

标签: javascript

我正在尝试编写一些执行相当繁重的计算的脚本。因此,我想通过更新网站上的内容(例如,完成计算的一小部分)来通知用户进度。是否可以用JavaScript实现? JavaScript是否允许在调用函数仍在运行时更新内容?或者也许无论在什么情况下我都可以在调用函数完成后更新内容?

5 个答案:

答案 0 :(得分:3)

看一看工人:http://www.html5rocks.com/en/tutorials/workers/basics/

它用于繁重的计算(在javascript规模的c),并附带一些函数来更新用户有关计算的状态,它基本上是javascript中的多线程。

答案 1 :(得分:2)

使用timers

从您的计算功能,更新全局变量。

然后从主线程中,使用setTimeout()setInterval()定期查询全局值并更新屏幕。

答案 2 :(得分:0)

当你的函数正在运行时,不会发生屏幕更新:UI线程必须像其他任何JS线程一样争取它的时间。你可以通过安排回调来做到这一点:

function f() {
  a();
  // update now
  b();
}

可以改写为

function f() {
  a();
  setTimeout(function() {
    b();
  }, 0);
}

这种方式有效,在a()之后,setTimeout将安排其余的功能,然后退出。这是UI线程现在可以(并且将会)获取控制权的地方;完成后,计划的剩余部分将执行。

如果您有适合(非常严重的)WebWorker限制的事情,您可以使用它们;然而,他们无法触摸UI,因此重绘是没有意义的(除非你像Antoine所说,并根据WebWorker计算的参数安排更新功能)。

答案 3 :(得分:0)

我的几分钱:

  • 最简单的解决方法是最简单的方法 显示一个繁忙的动画。

  • 尝试将重量级计算代码分解为多个部分&更新 进度条。

  • 或建议使用 Antoine ,尝试使用Web Workers

答案 4 :(得分:-1)

是的,可能你可以做到。我不知道您问题的所有细节,但您应该针对socket.io和异步node.js

使用 node.js ,您可以实时向客户端发送进程状态,并在客户端使用 socket.io 捕获服务器响应。