61

阅读此博文后:http ://www.sitepoint.com/javascript-shared-web-workers-html5/

我不明白。aWorker和 a 和有什么不一样SharedWorker

4

5 回答 5

42

非常基本的区别:aWorker只能从创建它的脚本访问,aSharedWorker可以由来自同一域的任何脚本访问。

于 2011-07-21T15:20:42.637 回答
13

SharedWorker 的功能似乎比 Worker 更多。

该功能包括:

  • 共享的全局范围。所有SharedWorker实例共享一个全局范围。

W3C 规范:

WHATWG 规范:

于 2011-07-21T15:18:13.420 回答
13

对于任何考虑使用 SharedWorker 的人——AppleSharedWorker在 2015 年取消了对 WebKit 的支持。在他们当前的路线图中,没有重新实施的计划。目前正在为 WebKit 开发对Service Worker的支持,并提供类似的功能(参见此处进行比较)。

您可以在此处关注 WebKit 中 ServiceWorkers的开发(也称为 Safari 支持)。

于 2017-01-16T18:32:34.340 回答
10

共享工作者可以处理多个连接。它将消息发布到端口以允许各种脚本之间的通信。

另一方面,专门的工作人员只是简单地绑定到其主连接,并且不能将消息发布到其他脚本(工作人员)。

于 2011-07-21T15:19:10.730 回答
0

共享工作者允许所有调用构造函数的首页上下文脚本:new SharedWorker("path-to-shared-worker-file.js") 共享在后台上下文中运行的共享工作者文件的同一实例(运行 javascript 的另一个线程在后面)。

例如,当网页#1调用该构造函数时,如果发现后面还没有加载共享工作者,它将导致后台上下文下载文件并加载它,然后当网页#2调用相同的构造函数时(相同的文件路径),它发现有一个现有的共享工作者正在运行,它将只使用同一个。当worker.port.start()函数被调用时,会导致共享worker文件onconnect事件处理程序被调用来注册调用者并获取与客户端端口通信的句柄(例如postMessage返回)。

但是worker,上面的每个网页都会在后台为每个单独的首页加载一个worker文件,而不是共享同一个worker.js实例。

于 2020-06-20T14:42:56.537 回答