不使用postMessage()将数据传递给Web worker

时间:2016-10-14 14:01:50

标签: javascript web-worker

我有一个全局变量对象,我想将它传递给我的工作者。

显然我最好的选择是将该变量对象转换为字符串,然后让我的工作人员将其转换回来,用它做东西,然后将其转换回字符串并将其传递回我的主线程。

有什么方法可以强制对象给工人吗?没有所有这些转换,或者像下载一些奇怪的东西那样奇怪的技巧。

我知道你可以使用setTimeout()来创建线程,但是这些线程由同一个核心使用,而一个worker使用不同的核心。

1 个答案:

答案 0 :(得分:0)

1。看一下插件jsonfn。 使用此插件,您可以将FunctionDateRegex的对象转换为字符串,并将此字符串转换回类似于常规JSON的对象

var str = JSONfn.stringify(obj);

var obj = JSONfn.parse(str);

查看实时示例和文档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/

查看实时示例和文档

3. setTimeout()不会创建线程。