Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务工作者能做哪些web工作者做不到的事情?_Javascript_Html_Service Worker_Web Worker_W3c - Fatal编程技术网

Javascript 服务工作者能做哪些web工作者做不到的事情?

Javascript 服务工作者能做哪些web工作者做不到的事情?,javascript,html,service-worker,web-worker,w3c,Javascript,Html,Service Worker,Web Worker,W3c,服务工作者能做哪些web工作者做不到的事情?反之亦然 web工作者似乎是服务工作者功能的一个子集。这是正确的吗?它们的用途有很大的不同: 网络工作者 Web工作者为Web内容提供了一种在后台线程中运行脚本的简单方法。工作线程可以执行任务,而无需 干扰用户界面。此外,它们还可以执行I/O 使用XMLHttpRequest(尽管响应XML和通道属性 始终为空)。创建后,工作人员可以将消息发送到 通过向事件发布消息来创建它的JavaScript代码 由该代码指定的处理程序(反之亦然。) 服务人员 服

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


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

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

网络工作者

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

服务人员

服务人员本质上充当位于web服务器之间的代理服务器 应用程序、浏览器和网络(如果可用)。他们是 旨在(除其他事项外)促成有效的 离线体验、拦截网络请求和 根据网络是否可用以及 更新的资产驻留在服务器上。他们还将允许访问 推送通知和后台同步API

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

是正确的,但在我看来,它并没有回答最初的问题,即:“服务人员可以做哪些web人员不能做的事情?反之亦然?”

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

|网络工作者|服务工作者|
|--------------|--------------|------------------|
|实例|每个选项卡多个|所有选项卡一个|
|寿命|与标签相同|独立|
|预期用途|并行性|离线支持|
Buksy的答案基本上是表格的最后一行。信用证:我从诺兰·劳森(Nolan Lawson)那里拿到了这张桌子

特别是,以下是生成和终止web workers的方法:

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

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

过去浏览器支持方面存在巨大差异:Safari for iOS的服务人员在11.3(2018年3月29日)之前根本无法使用,相比之下,2012年web workers的浏览器支持已经好得多了:

如果您必须支持IE11,则只能使用web workers:IE11没有服务workers,而且显然是web workers


不同浏览器之间的API支持存在细微差异,请参见(也是由Nolan Lawson提供的)。在特定浏览器中,一种辅助程序可能支持特定的API调用,而另一种则不支持。访问该页面并测试您自己的浏览器

服务人员

服务工作者是浏览器和网络之间的代理。通过拦截文档发出的请求,服务人员可以将请求重定向到缓存,从而实现脱机访问

/*main.js*/
register('/service-worker.js');
/*service-worker.js*/
//安装
self.addEventListener('install',函数(事件){
// ...
});
//激活
self.addEventListener('activate',函数(事件){
// ...
});
//侦听来自主文档的网络请求
self.addEventListener('fetch',函数(事件){
// ...

});那张表解释得很好。最初的问题可能更好地表述为“两者之间的区别是什么……”服务人员可以做哪些共享web人员做不到的事情?单是表格就应该让这成为一个公认的答案。另一个答案中的教科书定义对我来说没有多大意义,因为我是这些概念的新手。这并没有回答这个问题,即服务工作者能做什么,而网络工作者不能做什么。此答案仅粘贴他们打算做什么的摘要,以及实例等方面的差异。没有确定服务人员可以做哪些web人员做不到的事情。例如,web工作人员也可以像服务工作人员那样拦截请求并从缓存加载资源吗?网络工作者的寿命能比标签更长吗?也就是说,据称对他们寿命的限制有多大?有什么方法可以改变你的寿命吗?服务工作者能做什么,而网络工作者不能做什么?@Pacerier阅读了第二段和最后一段来回答你的问题。我同意Pacerier的观点,这并不能回答问题。我只知道一个做什么,另一个做什么。读者可能会据此得出结论,但一个好的答案应该澄清,甚至可能确认或否定读者的结论。我喜欢阿里提供的另一个答案,它更广泛地描述了这两种技术之间的差异。但我认为我答案的最后一段清楚地回答了这个问题,网络工作者可以帮助你构建离线应用程序。如果你认为有更好的答案,请随意添加另一个:)@Buksy,这是你评论中的一个输入错误:[[服务]]工作人员可以帮助你构建离线应用程序