究竟什么是网络工作者以及何时使用它们

What exactly are web workers and when to use them

本文关键字:何时使 什么 网络 工作者 究竟      更新时间:2023-09-26

我正在SO上阅读有关XMLHttpRequest的内容(有什么理由使用同步XMLHttpRequest吗?(,我在2010年的一个线程上读到,随着HTML5中"线程"的引入,开发人员可能会开始使用同步API。在谷歌上搜索了一下,我在网络工作者上找到了MDN页面。

我从大约一年开始编写Javascript和Node(假设是初学者(,我仍然会遇到使用这些Web工作者的东西。也许我需要阅读更多代码。

现在我的问题是,尽管它们似乎非常有用,但为什么在野外看不到多少?另外,使用它们时的一般用例和指南是什么?是否有可能在 Nodejs 环境中获得多线程处理优势?如果是这样,为什么所有的 Nodejs API 仍然是异步的?

谢谢。

Web Worker严格来说是一个客户端的东西,所以它与Node无关.js(编辑:实际上,请参阅此模块(。

你可能听说过 JavaScript 是严格的单线程:如果一个函数正在做一些繁重的计算,那么其他任何事情都不会完成,包括动画图标、重新绘制窗口,什么都没有。因此,客户端JS应始终避免繁重的计算,大循环以及任何其他可能篡夺线程超过几分之一秒的东西。

网络工作者是解决方案。每个 Web worker 都在自己的线程中运行,它可以随心所欲地阻止 - 它不会影响网页的正常运行。代价是它无法访问 DOM:它不影响渲染的事实意味着您无法影响使用它的渲染。:)如果一个 Web worker 想要渲染一些东西,它必须向主线程发送一条消息来做到这一点。

在实现方面,每个 Web worker 都需要在单独的 JS 文件中。你没有看到更多它们的原因可能是双重的:普通的 Joe 可能不知道如何使用它们,并且只有在你需要认真计算并且不希望它阻塞你的主线程时才需要它们 - 这首先并不常见,当它是时,计算通常会卸载到服务器(在客户端(或单独的进程(在 Node.js 中(。

阅读更多关于HTML5 Rocks的信息。