有没有办法从ArrayBuffer创建TypedArray而不在Javascript中使用new关键字?

问题描述 投票:2回答:1

我正在使用transferables在主线程和worker之间进行通信。我意识到通信创建了GC活动,因为在接收缓冲区后,我正在使用new关键字将缓冲区转换为类型化数组:

var ary = new Float32Array(buffer);

有没有办法重新使用TypedArray或获取缓冲区视图而不创建GC活动?

javascript web-worker transferable
1个回答
1
投票

我不认为有,不。 ArrayBuffer几乎是一个没有类型数组或DataView的黑盒子来查看它,你不能改变现有类型数组或DataView上的缓冲区。

在支持它的平台上,您可以创建主线程和工作线程都可以访问的SharedArrayBuffer,这样就不会出现GC问题,因为每一方都会重用其包装器数组。只需确保您通过postMessageAtomics(更多关于this question's answer中的信息)进入门户网站。

但遗憾的是,大多数浏览器都禁用了SharedArrayBuffer以响应Spectre,而最后我检查的只有Chrome重新启用它(在启用了网站隔离功能的平台上)。

© www.soinside.com 2019 - 2024. All rights reserved.