我一直在研究如何与网络工作者之间传输数据,我发现的每个例子都显示以下格式:
var myData = new Uint8ClampedArray(256);
postMessage(myData.buffer, [ myData.buffer ]);
但是我希望能够发送更多数据。所以,我的问题是以下是否还转移了myData
缓冲区的所有权,还是只是复制?
var myData = new Uint8ClampedArray(256);
postMessage({ foo: 'bar', data: myData }, [ myData.buffer ]);
答案 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%),但阵列缓冲区所有权正确传输。