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中文網其他相關文章!