Javascript 如何创建子工作者?
阅读了很多文章,但没有一篇给出了如何创建子工作者的明确答案?据我所知,有一种方法可以直接从一个webworker中完成,但我找到的唯一方法是installScript(),尽管它看起来更像是一种脚本注入。是否有人可以分享一个示例,说明如何创建一个,以及工作人员如何在每个其他人之间进行通信?子工作人员的生成方式与创建普通专用工作人员的方式完全相同:Javascript 如何创建子工作者?,javascript,dom,web-worker,Javascript,Dom,Web Worker,阅读了很多文章,但没有一篇给出了如何创建子工作者的明确答案?据我所知,有一种方法可以直接从一个webworker中完成,但我找到的唯一方法是installScript(),尽管它看起来更像是一种脚本注入。是否有人可以分享一个示例,说明如何创建一个,以及工作人员如何在每个其他人之间进行通信?子工作人员的生成方式与创建普通专用工作人员的方式完全相同: var worker = new Worker("worker.js"); worker.onmessage = function(event) {
var worker = new Worker("worker.js");
worker.onmessage = function(event) {
...
};
消息也以相同的方式从工作进程内发送到子工作进程,例如
worker.postMessage({cmd: 'start'});
您可以在上找到一个示例(包括测试它的链接)。
但目前支持子工作程序的浏览器只有Firefox和Edge。不幸的是,Chrome、Safari、Opera和Android浏览器(Nougat)还没有实现这一功能,尽管这有助于进一步提高多核系统的性能
据一位7岁的Chrome用户表示,他们似乎不太可能实现规范的这一部分
如果您想保持浏览器兼容性,唯一的方法是从主线程(它也管理DOM/UI)生成所有工作线程,并通过来回路由消息来增加它的负担
假设您想创建一个名为“handler”的工作程序,然后生成子工作程序并来回路由消息,您可以将该处理程序更改为伪工作程序(不在单独的线程中),但通过在“handler”的顶部添加此代码并用new PseudoWorker()实例化它,将代码更改保持在最小值代码>而不是新工作程序(“handler.js”)代码>(当然,您必须在网页中添加对“handler.JS”的JS引用,以便它能够找到类PseudoWorker):
唯一需要注意的是,伪工作者不会自动开始工作,而是在收到消息后才开始工作。这样就可以正确初始化变量。
但该代码适用于上述所有浏览器。只要浏览器支持子工作区,您就可以从伪工作区切换回普通工作区。子工作区的生成方式与普通专用工作区的创建方式完全相同:
var worker = new Worker("worker.js");
worker.onmessage = function(event) {
...
};
消息也以相同的方式从工作进程内发送到子工作进程,例如
worker.postMessage({cmd: 'start'});
您可以在上找到一个示例(包括测试它的链接)。
但目前支持子工作程序的浏览器只有Firefox和Edge。不幸的是,Chrome、Safari、Opera和Android浏览器(Nougat)还没有实现这一功能,尽管这有助于进一步提高多核系统的性能
据一位7岁的Chrome用户表示,他们似乎不太可能实现规范的这一部分
如果您想保持浏览器兼容性,唯一的方法是从主线程(它也管理DOM/UI)生成所有工作线程,并通过来回路由消息来增加它的负担
假设您想创建一个名为“handler”的工作程序,然后生成子工作程序并来回路由消息,您可以将该处理程序更改为伪工作程序(不在单独的线程中),但通过在“handler”的顶部添加此代码并用new PseudoWorker()实例化它,将代码更改保持在最小值代码>而不是新工作程序(“handler.js”)代码>(当然,您必须在网页中添加对“handler.JS”的JS引用,以便它能够找到类PseudoWorker):
唯一需要注意的是,伪工作者不会自动开始工作,而是在收到消息后才开始工作。这样就可以正确初始化变量。
但该代码适用于上述所有浏览器。只要浏览器支持子工作区,就可以从伪工作区切换回普通工作区