看了很多文章,但這些都不給出明確的答案如何創建一個subworker?我的理解是有辦法做到這一點右出一個webworker的,但我發現的唯一途徑是INSTALLSCRIPT(),但它似乎更多的是腳本注入的。有人分享一個例子如何創建一個以及工作人員如何在每個人之間進行溝通?如何創建一個子工作?
0
A
回答
1
甲subworker被精確地產生了創建正常專用工人相同的方式:
var worker = new Worker("worker.js");
worker.onmessage = function(event) {
...
};
和消息也從工人內,例如發送的相同的方式向subworker
worker.postMessage({cmd: 'start'});
你可以找到https://html.spec.whatwg.org/multipage/workers.html#delegation一個例子(包括鏈接進行測試)。 但是這在目前支持子Worker唯一的瀏覽器是火狐和邊緣。 Chrome,Safari,Opera和Android Browser(Nougat)並沒有實現這個功能,但不幸的是,它可以極大地幫助進一步提高多核系統的性能。
根據一個7歲的issue爲Chrome,它似乎並不可能,他們將實現該規範的這一部分。
如果你想保持瀏覽器的兼容性,唯一的辦法是產卵從主線程所有工人(其中還管理DOM/UI),並負擔其與傳送訊息回一個來回。
假設您想創建一個名爲「處理程序」的工作程序,然後生成子工作程序並來回路由消息,則可以將處理程序更改爲僞工作程序(不在單獨的線程中),但將代碼更改爲最小值通過在「處理程序」的頂部添加此代碼並將其new PseudoWorker();
代替new Worker("handler.js");
(當然其實例化你必須在你的網頁添加一個JS參考「handler.js」,所以就可以找到類PseudoWorker):
// begin of PseudoWorker wrapper
var parentOnmessage;
var PseudoWorker = function() {
var initialized = false;
this.postMessage = function(msg) {
self.onmessage({data: msg});
if (!initialized) {
self.parentOnmessage = this.onmessage;
initialized = true;
}
}
}
this.postMessage = function(data) {
parentOnmessage({data: data});
}
// end of PseudoWrapper - add your code after this line as if this was a normal worker
唯一要注意的是,該PseudoWorker不會開始工作,它接收到的消息自動但經過而已。這是因爲變量可以正確初始化。 但代碼適用於上述所有瀏覽器。只要瀏覽器支持子工作者,您就可以從PseudoWorker切換回普通工作者。
相關問題
- 1. 如何讓一個石英工作創建另一個工作來執行它?
- 2. 如何創建多個Excel工作表
- 3. 如何從一組.csv工作表創建一個.gexf文件?
- 4. AHBottomNavigation,如何創建一個子片段?
- 5. Android:我如何創建一個盒子?
- 6. 如何創建一個Doctrine子查詢?
- 7. 創建一個SQLCE命令不工作
- 8. 創建一個工作日陣列
- 9. Alasql - 如何創建多個工作表到工作簿?
- 10. 如何用C#中的工作表創建一個excel文件?
- 11. 如何創建一個網頁的工作的動畫
- 12. 如何創建一個新的R工作區
- 13. 如何在HTML上創建一個工作提交按鈕?
- 14. 如何創建一個多工作表excel jasper報告?
- 15. 如何創建一個後臺工作者池?
- 16. 如何在Visual Basic中創建一個工作彈出框?
- 17. 如何爲每個唯一值創建工作簿?
- 18. 如何創建一個VSCode Python工作區?
- 19. 從另一個工作內部創建工作Laravel 5.2
- 20. 我如何使用Renderer2來創建一個元素作爲一個孩子?
- 21. 創建用戶與離子不工作
- 22. 創建量子靈藥工作
- 23. 創建一個子進程
- 24. 如何從一個ImageMap創建一個子菜單
- 25. XMLRPC&MetaWeblog,我如何創建一個頁面,創建一個帖子,並附加頁面到這個帖子
- 26. 如何找出一個工作副本包含一個子樹?
- 27. 將工作表添加到另一個工作簿創建的工作簿
- 28. 如何創建順序工作流程?
- 29. 如何在TFS中創建工作區
- 30. 如何爲System.Web創建工作的ikvmstub