我正在开发一个个人网站,以结合Three.js和ScrollMagic与面向对象的Javascript。当用户滚动3d对象变换时。这一切都工作得很好,但有一个轻微的性能问题。为了改进这一点,我想把一些计算位置的loop/for函数移到一个web worker上(每当我调用一个循环函数时,滚动滞后)。
问题是我试图将类实例(THREE.PointCloud)的数组(512)传递给web worker。我似乎无法从web worker中的这些实例中获得任何有意义的完整属性。
首先,我只是试图将数组传递给worker,但得到了这个错误:'Uncaught : Failed to execute 'postMessage‘on 'Worker':无法克隆对象。’
然后我意识到我不能这样做,所以我使用了JSON.stringify()和JSON.Parse()。我可以得到数组的长度。但是,我无法获得每个实例的属性。
我想我需要使用ArrayBuffer?但是我不知道如何将我的实例数组转换为ArrayBuffer。有没有人?还是有一种更简单的方法来提高性能?
如果能帮上忙,我会很感激的。
谢谢。
发布于 2015-08-20 09:24:53
我想你可能是对的,你需要一个ArrayBuffer (或类似的)。我认为使用postMessage()并不能真正得到您想要的结果。因为在某些情况下,json (反)序列化过程相当耗时。
但你可能正在寻找的是“可转移的对象”。它不是克隆对象,而是更改所有者,因此不需要复制。
有相当多的地方在网上谈论转移对象,所以谷歌将是你的朋友。但是这里有一个https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage
希望这能有所帮助。
https://stackoverflow.com/questions/31880821
复制相似问题