Веб-воркеры с OO Javascript, ThreeJS и ScrollMagic

Я разрабатываю личный веб-сайт, чтобы объединить Three.js и ScrollMagic с OO Javascript. Когда пользователь прокручивает трехмерные объекты, они трансформируются. Все это работает хорошо, но есть небольшая проблема с производительностью. Чтобы улучшить это, я хочу переместить некоторые функции цикла / для, которые вычисляют позиции, в веб-воркер (всякий раз, когда я вызываю функцию цикла, прокрутка задерживается).

Проблема в том, что я пытаюсь передать массив (512) экземпляров класса (THREE.PointCloud) веб-работнику. Кажется, я не могу понять какие-либо полные свойства этих экземпляров в веб-воркере.

Во-первых, я просто попытался передать массив рабочему и получил эту ошибку «Uncaught DataCloneError: не удалось выполнить postMessage на« Worker »: объект не может быть клонирован».

Затем я понял, что не могу этого сделать, поэтому использовал JSON.stringify () и JSON.Parse (). Я мог получить длину массива. Однако мне не удалось получить свойства для каждого экземпляра.

Я думаю, мне нужно использовать ArrayBuffer? Но я понятия не имею, как преобразовать мой массив экземпляров в ArrayBuffer. Кто угодно? или есть более простой способ улучшить производительность?

Помощь будет очень признательна.

Спасибо.


person ewan    schedule 07.08.2015    source источник


Ответы (1)


Я думаю, вы, вероятно, правы, что вам нужен ArrayBuffer (или аналогичный). Я думаю, что использование postMessage () на самом деле не даст вам того, что вы хотите. Потому что процесс сериализации json (де) в некоторых случаях занимает довольно много времени.

Но то, что вы, вероятно, ищете, - это «передаваемые объекты». Вместо клонирования объекта (ов) он меняет владельца, поэтому копирование не требуется.

Есть довольно много мест, где говорится о передаче объектов в Интернете, поэтому Google будет здесь вашим другом. Но вот один https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage

Надеюсь, это поможет.

person Jero    schedule 20.08.2015