4

我有一个网络工作者(以 开头new Worker())进行一些处理并且应该返回一个Float32Array.
然而,似乎在 workerpostMessage()获取数据之后,它会通过序列化和反序列化到 JSON,而我在收到消息时最终得到的是一个普通的 javascript Array(具有原始类型化数组所具有的所有属性)

一个简单的解决方法是从 javascript 数组重新创建类型化数组,但这很浪费并且占用时间和内存。

有一个更好的方法吗?某种方式告诉 JSON 反序列化实例化 aFloat32Array而不是 javascript 数组?或以其他方式传输二进制数据的方法?

4

2 回答 2

2

所有支持工作线程的浏览器(IE10 除外)都支持所谓的可转移对象,这意味着如果您有一个数组缓冲区(即获取类型数组的 .buffer 属性),您可以作为 postMessage 的第二个参数包含数组缓冲区列表您想将所有权转移回来。这比复制要快得多。

于 2013-06-14T16:39:06.680 回答
1

更新:目前这似乎是一个 Chrome 错误:

http://code.google.com/p/chromium/issues/detail?id=73313

类型化数组保留在 Firefox 4 中。

于 2011-04-12T18:51:59.043 回答