4

我在http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html上阅读了有关 Web Worker 的信息,我想我理解他们的目的,但我想知道主要目的之一是否网络工作者,即“允许执行长任务而不会让页面保持响应。” 没有网络工作者就可以实现吗?像Registering Callbaks 一样,也允许执行长任务,并且只有在它们准备好时才中断,没有阻塞,不是一样吗?

4

2 回答 2

6

回调允许您管理并发。那就是处理任务。并不总是以简单的方式。

webworkers 不仅允许您以更简单的方式进行并发,还让您拥有并行性,即真正并行运行的任务:它们不一定会相互阻塞,也不会阻塞 UI。

为了在 web worker 之前在你的浏览器中运行一个基于 javascript 的长任务,你必须对其进行微观管理以将其切割成小部分,以使 UI 保持响应。当然,拥有不止一项长期运行的任务更复杂。

于 2013-01-17T14:05:42.753 回答
0

我们知道 Web 浏览器在过去几年中增长了很多,这主要是因为在其引擎上做了很多工作,例如 V8(谷歌)、Chakra(微软)。到目前为止,JavaScript 在单个线程中运行。单线程架构的问题在于它阻塞了代码,并且在运行复杂脚本的情况下 UI 变得无响应。有多种方法可以解决这个问题:

  1. 将工作卸载到服务器,但为了使应用程序更快,胖客户端是首选
  2. 使用异步调用,但许多复杂的异步调用和承诺生态系统可能会导致回调地狱
  3. 利用多线程。有趣的!

Web Workers 通过在 JavaScript 中提供多线程能力来解决这个问题。

于 2021-02-23T12:01:27.633 回答