Web工作人员是HTML5规范的功能,它允许JavaScript在后台运行,而与Web应用程序的主线程无关。任务的分离使Web开发人员能够执行计算密集型操作,而不会影响用户界面的响应能力。
要使用网络工人进行背景处理,您通常会遵循以下步骤:
worker.js
的文件。实例化工作者:在您的主要JavaScript文件中,通过使用您的工作脚本路径来实例Worker
对象来创建一个新工作。例如:
<code class="javascript">const myWorker = new Worker('worker.js');</code>
发送消息:通过使用postMessage
方法向其发送消息来与工人进行通信。工人可以使用事件侦听器在message
事件中接收这些消息。
<code class="javascript">myWorker.postMessage({command: 'start', data: someData});</code>
处理响应:在主线程中,使用事件侦听器为message
事件收听从工人发出的消息。
<code class="javascript">myWorker.onmessage = function(e) { console.log('Message received from worker', e.data); };</code>
终止工人:完成后,您可以使用terminate
方法终止工人。
<code class="javascript">myWorker.terminate();</code>
以这种方式使用网络工人可以使背景处理无需冻结或降低主线程,从而保持光滑的用户体验。
网络工作人员可以通过多种方式显着提高Web应用程序的性能:
由于其性质和要求,某些类型的任务特别适合网络工人:
是的,网络工作人员可以相互通信,这是由主题作为协调员的主题促进的过程。这是可以实现这种交流的方式:
主线程作为集线器:主线程可以充当中央集线器,从一个工人接收消息并将其转发给另一个工人。此方法要求主线程参与通信过程。
在主线程中:
<code class="javascript">const worker1 = new Worker('worker1.js'); const worker2 = new Worker('worker2.js'); worker1.onmessage = function(e) { if (e.data.command === 'sendToWorker2') { worker2.postMessage(e.data.message); } }; worker2.onmessage = function(e) { if (e.data.command === 'sendToWorker1') { worker1.postMessage(e.data.message); } };</code>
共享工人:工人间交流的另一种方法是使用共享工人。可以通过多个脚本访问共享工人,从而允许应用程序的不同部分通过一个共享的工人进行通信。
创建共享工人:
<code class="javascript">const sharedWorker = new SharedWorker('sharedWorker.js'); sharedWorker.port.onmessage = function(e) { console.log('Message received from shared worker', e.data); }; sharedWorker.port.postMessage({command: 'message', data: someData});</code>
直接工作人员的交流:虽然较不常见,也不太简单,但工人可以使用MessageChannel
和MessagePort
直接进行通信。这种方法需要在工人之间设置通道,主线程可以促进。
在主线程中:
<code class="javascript">const channel = new MessageChannel(); const worker1 = new Worker('worker1.js'); const worker2 = new Worker('worker2.js'); worker1.postMessage('connect', [channel.port1]); worker2.postMessage('connect', [channel.port2]);</code>
通过使用这些方法,网络工作者可以有效地相互通信,从而在Web应用程序中实现更复杂的背景处理方案。
以上是什么是网络工人?您如何将它们用于背景处理?的详细内容。更多信息请关注PHP中文网其他相关文章!