不使用postMessage将数据传递给web worker()
问题描述:
我有一个全局变量对象,我想将它传递给我的工人。不使用postMessage将数据传递给web worker()
显然,我最好的选择是将该变量对象转换为字符串,然后让我的工作人员将其转换回来,做它的东西,然后将其转换回字符串,并将其传回给我的主线程。
有没有什么办法可以强制对象给工人?没有所有这些转换,或者像下载一些奇怪的东西那样的怪异技巧。
我知道你可以使用setTimeout()创建线程,但这些线程是由同一个内核使用的,而工作人员使用不同的内核。
答
1.看看插件jsonfn。 有了这个插件,您可以用Function
,Date
和Regex
转换对象为字符串,并将其转换字符串返回到类似于常规JSON
var str = JSONfn.stringify(obj);
见活生生的例子和DOC http://www.eslinstructor.net/jsonfn/对象
2.看看插件vkThread。它允许你在一个线程中执行一段代码,而不需要任何Web工作者的技能,只需将一个函数传递给插件即可。
function foo(n, m) {
return n + m;
}
var param = {
fn: foo, // <-- function to run in a thread;
args: [2, 3] // <-- function's arguments;
};
vkthread.exec(param).then(
function(data){
console.log(data); // <-- prints 5;
}
);
看到活生生的实例和文档在http://www.eslinstructor.net/vkthread/
setTimeout()
不创建一个线程。
第一个解决方案不起作用,给我一些有关转换圆形结构的错误。 –
第二种解决方案也给我一个错误:“Uncaught SecurityError:无法构造'Worker':'blob:file:/// fc35db14-f7db-4579-8e45-8e18c2b7f132'中的脚本无法从原始'file://访问'。“ –
nvm,使用”--args --disable-web-security“标记来禁用安全工作... –