2

Three.js と ScrollMagic を OO Javascript と組み合わせて個人の Web サイトを開発しています。ユーザーがスクロールすると、3d オブジェクトが変換されます。これはすべてうまく機能しますが、わずかなパフォーマンスの問題があります。これを改善するために、位置を計算するいくつかのループ/関数を Web ワーカーに移動したいと考えています (ループ関数を呼び出すたびにスクロールが遅れます)。

問題は、クラス インスタンス (THREE.PointCloud) の配列 (512) を Web ワーカーに渡そうとしていることです。Web ワーカーのこれらのインスタンスから、意味のある完全なプロパティを取得できないようです。

まず、配列をワーカーに渡そうとしたところ、「Uncaught DataCloneError: Failed to execute 'postMessage' on 'Worker': An object could not be cloned.」というエラーが発生しました。

その後、これができないことに気付いたので、JSON.stringify() と JSON.Parse() を使用しました。配列の長さを取得できました。ただし、各インスタンスのプロパティを取得できませんでした。

ArrayBuffer を使用する必要があると思いますか? しかし、インスタンスの配列を ArrayBuffer に変換する方法がわかりません。誰?または、パフォーマンスを向上させる簡単な方法はありますか?

助けていただければ幸いです。

ありがとう。

4

1 に答える 1

1

ArrayBuffer (または同様のもの) が必要であることはおそらく正しいと思います。postMessage() を使用しても、あなたが望むものは実際には得られません。json (de)serialisation プロセスは場合によってはかなり時間がかかるためです。

しかし、おそらくあなたが探しているのは「譲渡可能なオブジェクト」です。オブジェクトを複製する代わりに、所有者を変更するため、コピーは必要ありません。

転送オブジェクトについてオンラインで話している場所はかなりあるので、Google はここであなたの友達になります。しかし、ここに 1 つhttps://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessageがあります

それが役立つことを願っています。

于 2015-08-20T01:24:53.000 に答える