使用面向对象Javascript、ThreeJS和ScrollMagic的Web工作者



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

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

首先,我只是试图将数组传递给worker,并得到了这个错误'Uncaught DataCloneError: Failed to execute 'postMessage' on ' worker:一个对象无法被克隆。'

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

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

非常感谢你的帮助。

谢谢。

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

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

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

希望对你有帮助。

最新更新