2

我正在开发一个个人网站,将 Three.js 和 ScrollMagic 与 OO Javascript 结合起来。当用户滚动 3d 对象变换时。这一切都很好,但有一个轻微的性能问题。为了改善这一点,我想将一些计算位置的循环/for函数移动到网络工作者(每当我调用循环函数时,滚动滞后)。

问题是我试图将类实例(THREE.PointCloud)的数组(512)传递给网络工作者。我似乎无法从网络工作者的这些实例中获得任何有意义的完整属性。

首先,我只是试图将数组传递给工作人员并得到这个错误'Uncaught DataCloneError:无法在'Worker'上执行'postMessage':无法克隆对象。

然后我意识到我不能这样做,所以我使用了 JSON.stringify() 和 JSON.Parse()。我可以得到数组的长度。但是,我无法获取每个实例的属性。

我想我需要使用 ArrayBuffer?但我不知道如何将我的实例数组转换为 ArrayBuffer。任何人?还是有更简单的方法来提高性能?

帮助将不胜感激。

谢谢。

4

1 回答 1

1

我认为您需要一个 ArrayBuffer (或类似的)可能是对的。使用 postMessage() 不会真正让你得到你想要的我想。因为在某些情况下,json(反)序列化过程是一个相当耗时的过程。

但是您可能正在寻找的是“可转移对象”。它不会克隆对象,而是更改所有者,因此不需要复制。

有很多地方都在谈论在线转移对象,所以谷歌将成为你的朋友。但这里有一个https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage

希望有帮助。

于 2015-08-20T01:24:53.000 回答