2011-07-21 39 views

回答

24

非常基本的区别:只能从创建它的脚本访问Worker,可以通过来自同一个域的任何脚本访问SharedWorker

+4

恩,所以''SharedWorker'通过'window.open'弹出窗口可以访问其他人假设他们在同一个来源?如果他们在一个全新的选项卡上,我猜不是? – Tower

+3

@Tower“同源”与产生另一页的页面无关。这意味着(粗略地)从脚本的调用位置开始的域名。请参阅[此图表](https://developer.mozilla。org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript#Definition_of_an_origin)。因此,两个'example.com'上的脚本都可以通过不同的标签访问同一个'SharedWorker'。 – rvighne

+0

那么,这是否意味着即使用户复制了从同一个域运行相同脚本的选项卡,常规WebWorker也只能有一个连接?或者仍然被浏览器视为相同的脚本?换句话说,app.js连接到worker.js,然后用户复制他们的标签:can tab2仍然连接到worker.js? worker.js是否仍然在tab1的app.js和tab2的app.js之间保持相同的内存池。我很感兴趣,因为我需要在后台进程/守护进程中维护队列结构,并将事件从同一应用程序中的任何打开的选项卡发布到此守护进程。 – Cody

9

SharedWorker似乎有更多的功能,然后工人。

其中该功能是:

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

W3C规格:

WHATWG规格:

+0

SharedWorker是否还具有更多“处理能力”? – Pacerier

6

共享工作人员可以使用多个连接。它将消息发布到端口以允许在各种脚本之间进行通信。

另一方面,一个专门的工作人员只是与其主要连接关联,不能将消息发布到其他脚本(工作人员)。

+0

那么,这是否意味着即使用户复制了从同一个域运行相同脚本的选项卡,常规WebWorker也只能有一个连接?或者仍然被浏览器视为相同的脚本?换句话说,app.js连接到worker.js,然后用户复制他们的标签:can tab2仍然连接到worker.js? worker.js是否仍然在tab1的app.js和tab2的app.js之间保持相同的内存池。我很感兴趣,因为我需要在后台进程/守护进程中维护队列结构,并将事件从同一应用程序中的任何打开的选项卡发布到此守护进程。 – Cody

5

对于任何使用SharedWorker考虑 - 苹果公司在2015年从取出的WebKit支持SharedWorker在他们current roadmap没有用于重新实施的计划。目前正在为WebKit开发支持Service Workers,并提供类似的功能(see here for comparisons)。

您可以关注ServiceWorkers in WebKit here的开发(也称为Safari支持)。

+0

这是什么意思?苹果不支持共享工作者? – Pacerier

+0

这意味着Apple WebKit从[Changeset 178310](https://trac.webkit.org/changeset/178310/webkit)删除了对SharedWorkers的支持,并且不打算重新引入其支持。 – charliebeckwith

相关问题