我正在开发一个个人网站,将 Three.js 和 ScrollMagic 与 OO Javascript 相结合。随着用户滚动 3d 对象变换。这一切都很好,但存在轻微的性能问题。为了改进这一点,我想将一些计算位置的循环/for 函数移动到网络 worker (每当我调用循环函数时滚动滞后)。
问题是我正在尝试将类实例 (THREE.PointCloud) 的数组 (512) 传递给网络 worker 。我似乎无法从 Web Worker 中的这些实例中获得任何有意义的完整属性。
首先,我只是试图将数组传递给工作人员并收到此错误“Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': An object could not be cloned.”
然后我意识到我不能这样做,所以我使用了 JSON.stringify() 和 JSON.Parse()。我可以获得数组的长度。但是,我无法获取每个实例的属性。
我想我需要使用 ArrayBuffer?但我不知道如何将我的实例数组转换为 ArrayBuffer。任何人?还是有更简单的方法来提高性能?
非常感谢您的帮助。
谢谢。
最佳答案
我认为您可能是对的,您需要一个 ArrayBuffer(或类似的)。 使用 postMessage() 不会真正让你得到你想要的东西。因为在某些情况下,json(反)序列化过程是一个相当耗时的过程。
但您可能正在寻找的是“可转移对象”。它不是克隆对象,而是更改所有者,因此不需要复制。
网上有很多地方都在谈论传输对象,所以 google 会是你的 friend 。但这里有一个 https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage
希望对您有所帮助。
关于javascript - 使用 OO Javascript、ThreeJS 和 ScrollMagic 的网络 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880821/