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

时间:2016-02-10 05:30:10

标签: javascript node.js

我正在阅读有关XMLHttpRequest(Is there any reason to use a synchronous XMLHttpRequest?)的内容,我在2010年的一个帖子中读到了这一点,随着HTML5中“线程”的引入,开发人员可能开始使用同步API。在谷歌上搜索一下,我在网络工作者上找到了MDN页面。

我正在写大约一年的Javascript和Node(假设是初学者),我仍然会遇到一些利用这些网络工作者的东西。也许我需要阅读更多代码。

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

谢谢。

1 个答案:

答案 0 :(得分:2)

web-worker绝对是客户端的东西,因此它与Node.js无关(编辑:实际上,请参阅this module)。

你可能听说JavaScript是严格的单线程的:如果一个函数正在进行一些繁重的计算,那么就没有别的事了,包括动画图标,重新绘制窗口,什么都没有。因此,客户端JS应该始终避免繁重的计算,大型循环以及其他任何可能超过一小时的线程。

网络工作者就是解决方案。每个Web工作者都在自己的线程中运行,它可以阻止它想要的东西 - 它不会影响网页的正常运行。权衡是它无法访问DOM:它不会影响渲染,这意味着您不能使用它来影响渲染。 :)如果网络工作者想要渲染某些内容,则必须向主线程发送消息才能执行此操作。

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

详细了解HTML5 Rocks