在HTML5中,SharedWorker
和普通的Worker
都是用于在后台执行 JavaScript 代码的 API。它们可以在Web Workers之间方便地共享数据,并且在主线程上没有阻塞效应,提高了Web应用程序的性能。
然而,这两种工人之间存在一些重要的区别,下面将详细介绍:
Worker
vs SharedWorker
Worker
Worker
是最常用的Web Worker类型。每个Worker
实例只能与一个创建它的页面进行通信。当一个Worker
被创建时,它会启动一个新的线程并在其中运行指定的JavaScript文件。主线程可以向Worker
发送消息,并在需要时接收Worker
发送的消息。
以下是一个使用Worker
的示例代码:
-- -------------------- ---- ------- -- ------- ----- -------- - --- -------------------- --------------------------- ---- --- ---- ---------- ------------------ - ----------- - -------------------- -------- ---- --------- -------- --
-- -------------------- ---- ------- -- --------- -------------------------------- ----------- - -------------------- -------- ---- ---- --------- -------- ----- -------- - ------ ---- --- ------ --------- --------------------------- ---
在这个例子中,我们首先创建了一个Worker
实例并向它发送了一条消息。当Worker
接收到这条消息时,它会打印一条消息,并发回另一条消息。
SharedWorker
相比之下,SharedWorker
是一个可以与多个页面共享的Web Worker实例。它可以在多个页面中同时运行,并且如果其中一个页面发送了一条消息,所有其他页面都会收到相同的消息。
以下是一个使用SharedWorker
的示例代码:
-- -------------------- ---- ------- -- ------- ----- -------- - --- -------------------------- ----------------------------------------- ----------- - -------------------- -------- ---- --------- -------- --- ---------------------- -------------------------------- ---- --- ---- ----------
-- -------------------- ---- ------- -- --------- -------------------------------- ----------- - ----------------------- ----------- ---- - -------- ----- ---- - ----------- -------------------------------- ----------- - -------------------- -------- ---- - ------- -------- ----- -------- - ------ ---- --- ------ --------- --------------------------- --- ------------- ---
在这个例子中,我们首先创建了一个SharedWorker
实例并向它发送了一条消息。当页面连接到SharedWorker
时,connect
事件将被触发,并为该页面建立一个通信端口。通过此端口,我们可以向SharedWorker
发送消息并接收来自其他页面的消息。
总结
SharedWorker
和Worker
都是可用于在后台执行JavaScript代码的Web Worker类型。Worker
仅能与创建它的页面通信,而SharedWorker
可以与多个页面共享数据。在设计Web应用程序时,我们应该根据需要选择合适的Worker类型。
以上是HTML5中共享的工人和工人的区别。希望这篇文章能为您提供深入学习和指导。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/15628