当前位置: 首页 > 知识库问答 >
问题:

服务工作者可以做哪些web工作者做不到的事情?

汲利
2023-03-14

服务工作者可以做哪些web工作者做不到的事情?或者反之亦然?

看来web工作者是服务工作者功能的一个子集。这是正确的吗?

共有2个答案

颛孙子民
2023-03-14

Buksy的回答是正确的,但在我看来,它没有回答原来的问题,即:“服务工作者能做什么而web工作者不能做的?反之亦然?”

它们的生命周期和每个起源可以拥有的实例数有根本的不同。简而言之:

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

Buksy的答案基本上是表格的最后一行。信贷:这张表来自诺兰·劳森的《揭秘网络工作者和服务工作者》,从幻灯片35开始。

特别是,以下是如何生成和终止web Workers的:

使用Web Workers

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

服务工作者生命周期

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

在浏览器支持方面曾经有过巨大的差异:Safari for iOS在11.3之前(2018年3月29日)根本无法使用服务工作者,请参阅“我可以使用服务工作者吗?”相比之下,web workers在2012年就已经有了更好的浏览器支持:我可以使用web workers吗?

如果你必须支持IE11,你只能使用web工作者:IE11没有服务工作者,显然对IE11支持的结束是2025年10月14日。

它们在跨浏览器的API支持上有细微的差别,参见HTML5工作者html" target="_blank">测试(同样由Nolan Lawson著)。在特定的浏览器中,一种worker可能支持某个API调用,而另一种则不支持。访问该页面并测试您自己的浏览器!

翁凯定
2023-03-14

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

Web工作者

Web Workers为Web内容提供了一种在后台线程中运行脚本的简单手段。辅助线程可以在不干扰用户界面的情况下执行任务。此外,它们还可以使用XMLHttpRequest执行I/O(尽管responseXML和channel属性始终为空)。创建后,worker可以通过将消息发布到创建它的JavaScript代码指定的事件处理程序(反之亦然)来向该代码发送消息

源代码使用Web Workers

服务人员

服务工作者本质上充当web应用程序、浏览器和网络(如果可用)之间的代理服务器。它们的目的是(除其他外)创建有效的离线体验,拦截网络请求,并根据网络是否可用以及更新的资产是否驻留在服务器上采取适当的操作。它们还允许访问推送通知和后台同步API。

Source-Service Worker API

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

 类似资料:
  • 一旦安装了Service Worker,Chrome浏览器需要多长时间来检查它的更新版本?当前客户端服务工作人员通常什么时候到期? 我正试图找出与服务人员一起开发并将更改推送到prod的最佳实践。目前,一旦对服务人员的行为方式实施了更改,如果已经安装了以前的服务人员,则客户机并不总是会接受该更改。 这个问题也有一定的相关性:以编程方式更新服务工作人员——理想情况下,一旦对SW实现了更改,您会希望在

  • 我注意到,当服务工作人员脚本本身加载到浏览器中时,不再触发服务工作人员的读取事件。例如,当我们有一个新版本的服务辅助角色时,旧的服务辅助角色读取事件不会被触发。因此,旧的服务工作者不能再检查新服务工作者的内容。 我确信这以前是可能的,我想知道这是否是一个bug,或者是否对此进行了任何更改。我在官方存储库或W3C草稿中没有找到与此更改相关的任何内容。 为了验证fetch事件没有被触发,我用版本号(参

  • 问题内容: 从我的根目录删除后,Chrome仍然运行我从Webroot中删除的服务工作者。如何从我的网站和Chrome卸载服务工作者,以便可以重新登录我的网站? 我已将问题归结为ServiceWork的缓存机制,我只想暂时将其删除,直到有时间对其进行调试为止。我正在使用的登录脚本将重定向到Google的服务器,以便他们登录其Google帐户。但是,我从login.php页面获得的只是一条消息。 问

  • 从根目录中删除后,Chrome仍然运行我从webroot中删除的服务工作者。我如何从我的网站和Chrome卸载服务工作者,以便我可以重新登录到我的网站? 我已经将问题追溯到Service Work的缓存机制,我现在只想删除它,直到我有时间调试它。我正在使用的登录脚本重定向到谷歌的服务器,以便他们登录到他们的谷歌帐户。但是我从login.php页面得到的只是一条消息。

  • 本文向大家介绍js的new操作符做了哪些事情?相关面试题,主要包含被问及js的new操作符做了哪些事情?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: new 操作符新建了一个空对象,这个对象原型指向构造函数的prototype,执行构造函数后返回这个对象。

  • 我得到了一个使用Hibernate连接到数据库并检索数据的方法。当作为独立的java应用程序执行时,该方法运行良好。然而,当我试图在tomcat上部署它并作为网络服务调用时,我得到了一个错误,如下所示。我的方法是第一个也是唯一一个建立DB连接的地方,即。我没有在tomcat中定义任何数据源。 我的hibernate配置文件: 我正在使用以下hibernate模块: hibernate注释3.4.0