我有一个 web worker(从 new Worker()
开始)做一些处理并且应该返回一个 Float32Array
。
然而,似乎在工作人员 postMessage()
数据之后,它经过序列化和反序列化到 JSON,而我在收到消息时最终得到的是一个普通的 javascript Array
(具有原始类型化数组的所有属性)
一个简单的解决方法是从 javascript 数组重新创建类型化数组,但这很浪费,而且会占用时间和内存。
有更好的方法吗?某种方式告诉 JSON 反序列化实例化 Float32Array
而不是 javascript 数组?或者以其他方式传输二进制数据的方法?
最佳答案
所有支持 worker 的浏览器(IE10 除外)都支持所谓的可传输对象,这意味着如果您有一个数组缓冲区(即获取类型化数组的 .buffer 属性),您可以将列表作为 postMessage 的第二个参数要转移所有权的数组缓冲区。这比复制它要快得多。
关于JavaScript:Web Worker 和类型化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5638453/