允许的webworker数据传输格式

时间:2017-01-06 00:32:31

标签: javascript web-worker

我一直在研究如何与网络工作者之间传输数据,我发现的每个例子都显示以下格式:

var myData = new Uint8ClampedArray(256);
postMessage(myData.buffer, [ myData.buffer ]);

但是我希望能够发送更多数据。所以,我的问题是以下是否还转移了myData缓冲区的所有权,还是只是复制?

var myData = new Uint8ClampedArray(256);
postMessage({ foo: 'bar', data: myData }, [ myData.buffer ]);

1 个答案:

答案 0 :(得分:1)

几个月后我才回到这里,并决定运行基准测试。不幸的是我无法弄清楚如何在jsperf上正确地做到这一点,所以我继续把this gist放在一起。使用1 MB import {Injectable} from '@angular/core'; import {Http, Headers} from '@angular/http'; import 'rxjs/add/operator/map'; import {Task} from "../../Task"; @Injectable() export class TaskService{ constructor(private http:Http){ console.log('Task Service Initialized...'); } getTasks(){ return this.http.get('/api/tasks') .map(res => <Task[]>res.json()); } 超过10000次往返循环,我的结果如下:

Uint8ClampedArray

结果基本上与我的预期相符,但要确认是件好事。在对象中添加额外数据似乎有一些开销(~10%),但阵列缓冲区所有权正确传输。