Javascript / canvas: рисовать полилинии в режиме реального времени, какова оптимальная структура данных? - PullRequest
2 голосов
/ 19 ноября 2010

Мы используем Javascript для рисования полилиний на элементе <canvas> на основе некоторых пространственных и временных координат. В частности, каждая точка в линии имеет следующие свойства:

* point.x
* point.y
* point.time

означает, что в то время point.time мы расширяем полилинию дополнительным сегментом до point.x/point.y. Основываясь на времени, важно, чтобы структура данных для набора всех точек была максимально эффективной с точки зрения времени доступа.

Интуитивно я считаю, что простой массив с 3 x N элементами (для N узлов) будет работать лучше всего.

Есть ли у вас другие предложения по подходящей структуре?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Я бы предпочел, чтобы точка была объектом объекта с временными ключами, хранящими координаты, как

   point = {
      <time1> : {
         x : ... ,
         y : ...
      },
      <time2> : {
         x : ... ,
         y : ...
      },
      ...

   }

так что вы можете получить доступ напрямую с помощью point.time.x и point.time.y, поскольку x и y относятся к определенному времени (если я хорошо понял)

вместо этого, с плоским массивом, заданным определенное время, вы должны выполнить операцию смещения, чтобы получить x и y, не так элегантно

1 голос
/ 19 ноября 2010

У вас нет доступа к указателям или чему-либо еще, поэтому вы в основном оставлены для массивов и объектов в JavaScript.

Поскольку ваша задача довольно проста и требует только линейного доступа, [x, y, t, x, y, t, x, y, t] массив должен действительно быть самым быстрым способом доступа к вещам.

Однако имейте в виду, что доступ к данным здесь не будет ограничивающим фактором, <canvas> производительность рисования, особенно в браузере без аппаратного ускорения (который в настоящее время по-прежнему составляет большинство), будет довольно плохо, если вы будете рисовать на очень большом холсте или на множестве линий за короткий промежуток времени.

Да, и не в последнюю очередь, протестируйте его, неНе думайте о производительности, помните:
«Преждевременная оптимизация - корень зла»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...