标签: transferable

使用Web Worker中的可传输对象

我目前有这个代码来创建一个Web Worker:

w = new Worker("webwork.js");
w.onmessage = function(event) { alert(event.data); }
Run Code Online (Sandbox Code Playgroud)

然后是webwork.jsWeb Worker 的代码:

self.onmessage = function(event) {
    //var ss=r;  //Causes error because of undefined
    var ss="";
    for(var currProp in event) {
        ss+=("event."+currProp+"="+event[currProp]+"\n");
    }
    postMessage(ss);
}
Run Code Online (Sandbox Code Playgroud)

现在我想ArrayBuffer用这段代码传输128兆字节:

var r = new ArrayBuffer(1048576*128);
w.postMessage(0, [r]);
Run Code Online (Sandbox Code Playgroud)

既然我已经转移了变量r,我该如何从Web Worker本身访问它.我已经试过event.r,只是r,self.r和喜欢尝试添加第二个函数参数为数组其他东西ArrayBuffers,但没有任何工程.

如何从Web Worker访问传输的变量?

javascript web-worker transferable

27
推荐指数
2
解决办法
2万
查看次数

chrome.runtime是否支持使用可传输对象发布消息?

我正在学习可转移对象:http://updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast

它们看起来非常棒,我想在我的扩展中使用它们来加速将数据从iframe内部传递到iframe之外.

我有这个示例代码工作,但它使用Web Worker:

var s = document.createElement("script");
s.type = "text/js-worker";
s.innerHTML = 'console.log("i ran!");';
document.body.appendChild(s);

var blob = new Blob(Array.prototype.map.call(document.querySelectorAll("script[type=\"text\/js-worker\"]"), function (oScript) {
    return oScript.textContent;
}), { type: "text/javascript" });

var worker = new Worker(window.URL.createObjectURL(blob));

var arrayBuffer = new ArrayBuffer(1);

worker.onmessage = function (oEvent) {
    console.log("Called back by the worker!\n");
};

console.log("worker:", worker);
worker.postMessage(arrayBuffer, [arrayBuffer]);

if (arrayBuffer.byteLength) {
    console.error("nope");
} else {
    console.log("it worked");
}
Run Code Online (Sandbox Code Playgroud)

有没有人有任何关于支持的信息,或支持使用端口的crbug的时间表,如:

var port = chrome.runtime.connect({
    name: 'youTubeIFrameConnectRequest'
});

//port.postMessage -- transferrable …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension transferable

7
推荐指数
1
解决办法
1625
查看次数

可转换的自定义类与ES6 Web工作者

在Javascript ES6中,在浏览器中,我想使用"Transferable"界面将自定义类对象传输给Web worker.这可能吗?我可以找到有关ArrayBuffer对象的文档,但不能找到自定义类对象的文档.

这与如何通过Web-Workers传递自定义类实例不重复因为我的问题是关于Transferable接口的.我想将自定义类实例传递给worker而不复制它.

web-worker ecmascript-6 transferable

7
推荐指数
1
解决办法
284
查看次数

使用可传输对象调用postMessage时,MessageChannel port.postMessage的数据为空?

我正在学习MessageChannel和可转移的对象.

我的页面中有一个跨域的iframe.MessageChannel周围的文档表明它完全支持跨域通信.

我在iframe中的跨域页面中有这个代码:

var messageChannel = new MessageChannel();

//  Transfer port2 to the background page to establish communications.
window.parent.postMessage('connect', 'chrome-extension://jbnkffmindojffecdhbbmekbmkkfpmjd', [messageChannel.port2]);
messageChannel.port1.start();

// Give time for background to setup its port. Not great practice, but OK for example.
setTimeout(function(){ 

    // Create a 32MB "file" and fill it.
    var uInt8Array = new Uint8Array(1024*1024*32); // 32MB
    for (var i = 0; i < uInt8Array.length; ++i) {
        uInt8Array[i] = i;
    }

    messageChannel.port1.onmessage = function(message){
        console.log('iframe message:', message);
    };

    messageChannel.port1.postMessage(uInt8Array.buffer, …
Run Code Online (Sandbox Code Playgroud)

javascript iframe transferable

5
推荐指数
1
解决办法
1014
查看次数

无法在“DedicatedWorkerGlobalScope”上执行“postMessage”:索引 0 处的值没有可转移类型

这是我的工人的代码:

onmessage = function (event) {
    postMessage({'data': event.data}, ['http://localhost:9000']);
};
Run Code Online (Sandbox Code Playgroud)

这是我使用工人的代码:

var worker = new Worker("/path/to/my/worker.js");
worker.onmessage = function (event) {
    console.log("RECEIVED: ", event.data);
};
worker.onerror = function (err) {
    console.log('ERROR: ', err)
};
worker.postMessage({'data': 'blabla', 'msg': 'Hi'});
Run Code Online (Sandbox Code Playgroud)

但是当调用工作代码中的 postMessage 时,它​​给了我这个错误:“无法在 'DedicatedWorkerGlobalScope' 上执行 'postMessage':索引 0 处的值没有可转移类型。”

我还尝试使用以下代码序列化对象:

onmessage = function (event) {
        postMessage(JSON.stringify({'data': event.data}), ['http://localhost:9000']);
    };
Run Code Online (Sandbox Code Playgroud)

但一切都没有改变。

- - - 编辑 - - - - - - - - - - - - - - - - - - - …

javascript postmessage worker web-worker transferable

5
推荐指数
1
解决办法
5094
查看次数

通过引用将提交的文件传递给Web Worker,并且开销尽可能小

我将有一个网络工作者来解析巨大的文本文件(200000行,尽管语法简单)。我希望用户通过拖放即可提交该文件,否则将获得一个File对象:

   var work = new Worker("parser.js")
   document.addEventListener("drop", function(e) {
       e.preventDefault();
       var dt    = e.dataTransfer;
       var files = dt.files;
       if(files.length>0) {
         var firstFile = files[0]
         var reader = new FileReader();
         //SEND FILE TO WORKER?
       }
   });
Run Code Online (Sandbox Code Playgroud)

我听说了可转让的对象。有没有办法文件传输到Worker?以某种方式,GUI线程不会因读取文件而变慢?

javascript web-worker fileapi transferable

4
推荐指数
1
解决办法
2042
查看次数