繁体   English   中英

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

[英]Multiple updates during one function call in JavaScript

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

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

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

使用计时器

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

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

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

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

可以改写为

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

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

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

我的几分钱:

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

  • 尝试将重量级计算代码分解成碎片并更新进度条。

  • 或者如Antoine建议的那样,尝试使用Web Workers

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM