阅读此博文后:http://www.sitepoint.com/javascript-shared-web-workers-html5/
我不明白。 Worker
和SharedWorker
之间有什么区别?
答案 0 :(得分:28)
非常基本的区别:只能从创建它的脚本访问Worker
,来自同一域的任何脚本都可以访问SharedWorker
。
答案 1 :(得分:11)
SharedWorker似乎有更多的功能,然后是工人。
该功能包括:
SharedWorker
实例共享一个全局范围。W3C规范:
WHATWG规格:
答案 2 :(得分:7)
共享工作者可以使用多个连接。它将消息发布到端口以允许各种脚本之间的通信。
另一方面,专用工作人员只是绑定到主连接,无法将消息发布到其他脚本(工作人员)。
答案 3 :(得分:7)
对于任何考虑使用SharedWorker的人 - Apple在2015年取消了对WebKit SharedWorker
的支持。在他们的current roadmap中,没有重新实现的计划。目前正在为WebKit开发对Service Workers的支持,并提供类似的功能(see here for comparisons)。
您可以关注ServiceWorkers in WebKit here的开发(即Safari支持)。
答案 4 :(得分:0)
Shared worker允许所有首页上下文脚本,该脚本调用构造函数:new SharedWorker(“ path-to-shared-worker-file.js”)共享在后台上下文中运行的共享worker文件的同一实例(另一个线程)在后面运行javascript)。
例如,当网页#1调用该构造函数时,如果发现后面尚未加载共享工作程序,它将导致后台上下文下载文件并将其加载,然后在随后的网页#2中调用相同的构造函数(相同的文件路径),它发现有一个现有的共享工作程序正在运行,它将使用相同的共享工作程序。调用worker.port.start()函数时,它将导致调用共享工作程序文件的onconnect事件处理程序来注册调用方,并获取与客户端端口进行通信的句柄(例如,用于postMessage返回)。
但是,工作程序,上面的每个网页都会在后台为每个首页加载一个工作程序文件,而不是共享同一worker.js实例。