Я пытаюсь выбрать правильную технологию для обновления проекта, который в основном отображает тысячи точек на масштабируемом графике с возможностью панорамирования. Текущая реализация, использующая Protovis, неэффективна. Посмотрите здесь:
http://www.planethunters.org/classify
При полном уменьшении получается около 2000 точек. Попробуйте использовать ручки внизу, чтобы немного увеличить масштаб, и перетащите его, чтобы панорамировать. Вы увидите, что он довольно нестабильный, и использование вашего процессора, вероятно, достигнет 100% на одном ядре, если у вас нет действительно быстрого компьютера. Каждое изменение в области фокуса вызывает перерисовку protovis, которая чертовски медленная и хуже, чем больше нарисовано точек.
Я хотел бы внести некоторые изменения в интерфейс, а также изменить базовую технологию визуализации, чтобы она была более отзывчивой с анимацией и взаимодействием. Из следующей статьи кажется, что выбор стоит между другой библиотекой на основе SVG или библиотекой на основе холста:
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/
d3.js , который вырос из Protovis, основан на SVG и должен лучше обрабатывать анимацию . Однако я сомневаюсь, насколько лучше и каков потолок его производительности. По этой причине я также рассматриваю возможность более полного пересмотра с использованием библиотеки на основе холста, такой как KineticJS . Однако, прежде чем я перейду к использованию того или иного подхода, я хотел бы услышать мнение кого-то, кто создал подобное веб-приложение с таким большим объемом данных, и узнать его мнение.
Самым важным является производительность, а второстепенное внимание уделяется простоте добавления других функций взаимодействия и программирования анимации. Вероятно, сразу будет не более 2000 точек с небольшими полосами погрешностей на каждой. Увеличение, уменьшение и панорамирование должны быть плавными. Если самые последние библиотеки SVG подходят для этого, то, возможно, простота использования d3 перевесит увеличенную настройку для KineticJS и т. Д. Но если использование холста дает огромное преимущество в производительности, особенно для людей с более медленными компьютерами, тогда я определенно предпочел бы пойти этим путем.
Пример приложения, созданного NYTimes, которое использует SVG, но все еще достаточно плавно анимирует: http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html . Если мне удастся добиться такой производительности и мне не придется писать собственный код для рисования холста, я, вероятно, выберу SVG.
Я заметил, что некоторые пользователи использовали гибрид манипуляции d3.js в сочетании с рендерингом холста . Однако я не могу найти много документации по этому поводу в Интернете или связаться с OP этого сообщения. Если у кого-то есть опыт реализации такого рода реализации DOM-to-Canvas ( демонстрация , код ), я хотел бы услышать и от вас. Кажется, это хороший гибрид возможности манипулировать данными и иметь собственный контроль над тем, как их отображать (и, следовательно, производительность), но мне интересно, будет ли необходимость загружать все в DOM по-прежнему замедлять работу.
Я знаю, что есть некоторые существующие вопросы, похожие на этот, но ни один из них не задает одно и то же. Спасибо за вашу помощь.
Продолжение : реализация, которую я использовал, находится на https://github.com/zooniverse/LightCurves