服务人员可以做什么,而网络工人不能做什么?


Answers:


140

它们的用途有很大的不同:

网络工作者

Web Workers为Web内容提供了一种在后台线程中运行脚本的简单方法。工作线程可以执行任务,而不会干扰用户界面。另外,他们可以使用XMLHttpRequest执行I / O(尽管responseXML和channel属性始终为null)。创建后,工作人员可以通过将消息发布到该代码指定的事件处理程序中来向创建该代码的JavaScript代码发送消息(反之亦然)。

来源-使用Web Workers

服务人员

服务工作者本质上充当位于Web应用程序与浏览器和网络(如果可用)之间的代理服务器。它们(除其他事项外)旨在创建有效的脱机体验,拦截网络请求并根据网络是否可用以及服务器上是否存在更新的资产采取适当的措施。他们还将允许访问推送通知和后台同步API。

来源-Service Worker API

因此,Web Workers可以方便地运行昂贵的脚本而不会导致用户界面冻结,而Service Workers可以用于修改来自网络请求的响应(例如,在构建脱机应用程序时)。


1
服务人员可以做什么,而网络工人不能做什么?
6

1
@Pacerier阅读了第二引号和最后一段以回答您的问题
Buksy

我同意Pacerier的观点,这不能回答问题。我只告诉一个人做什么,另一个人做什么。读者可能会基于此得出结论,但一个好的答案应该阐明,甚至可以确认或否定读者的结论。
kicia

我喜欢Ali提供的另一个答案,它更广泛地描述了这两种技术之间的差异。但是我认为答案的最后一段显然可以回答问题,Web Workers可以帮助您构建离线应用程序。如果您认为有更好的答案,请随时添加另一个:)
Buksy

1
@Buksy,您的注释中有错字:[[服务]]工作人员可以帮助您构建离线应用
Ahmad Mobaraki

143

Buksy的答案是正确的,但我认为它并不能回答最初的问题,即:“服务工作者可以做什么,网络工作者无法做到?反之亦然?”

它们的生命周期和每个原始源可以拥有的实例数量存在根本差异。简而言之:

               | Web Workers  | Service Workers  |
|--------------|--------------|------------------|
| Instances    | Many per tab | One for all tabs |
| Lifespan     | Same as tab  | Independent      |
| Intended use | Parallelism  | Offline support  |

Buksy的答案基本上是表格的最后一行。信用:我从Nolan Lawson 摘自Demystifying Web Workers和Service Workers的这张表,从幻灯片35开始。

特别是,这是生成和终止Web Worker的方式:

使用网络工作者

而服务人员有自己的生命周期,这无疑是他们的“最复杂的部分”:

服务人员生命周期

因此,生命周期是两者之间的一个根本区别(其预期用途的结果)。

浏览器支持之间过去存在巨大差异:直到11.3(2018年3月29日),iOS的Safari才完全没有服务人员,请参阅我可以使用服务人员吗?相比之下,网络工作者在2012年已经有了更好的浏览器支持:我可以使用网络工作者吗?

如果必须支持IE11,则只能使用Web Worker:IE11没有Service Worker,显然,对IE11的支持终止于2025年 10月14日

跨浏览器的API支持存在细微的差异,请参见HTML5 Worker Test(也由Nolan Lawson撰写)。在特定的浏览器中,一种工作程序可能支持某个API调用,而另一种则不支持。访问该页面并测试您自己的浏览器!


3
该表很好地说明了这一点。最初的问题可能会更好地表述为“ ...之间有什么区别?”
Drenai

1
服务工作者可以做什么共享的Web工作者不能做的事情?
起搏器
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.