Визуализация компоновки D3 медленно замедляется при использовании большого набора данных?

Я использую d3.js для создания ориентированного на силу макета моего графика, состоящего из 50K узлов. Для всего, что меньше 5K, библиотека творит чудеса. Я использую пример прямо на странице d3.js примеров, изменив ссылку, чтобы загрузить мой json файл.

Есть ли советы по ускорению рендеринга? Если есть другие альтернативы, это тоже хорошо.

Ответы

Ответ 1

Я сомневаюсь, что вы найдете какой-либо вариант, который может отображать 50K-узлы в силовом макете, не замедляя сканирование - большинство реализаций - O (n3), и я не думаю, что D3 ничем не отличается.

Если офлайн-инструменты приемлемы, вы можете проверить Gephi инструмент на рабочем столе, который может обрабатывать очень большие графики.

Ответ 2

Для меня это очень медленная анимация при отображении большого количества данных по графику, ориентированному на силу d3.

Когда мне нужно отображать много узлов/ссылок, мой план будет состоять в том, чтобы удалить анимацию и иметь диаграмму направленной статической силы. Может быть, вы можете попробовать это? Да, это менее забавно, но как только у вас много узлов, я не думаю, что анимация помогает.

Ответ 4

Для более чем 1k элементов в силовой макете рассмотрите возможность использования холста вместо svg. Это может помочь в производительности рендеринга. См. Пример здесь:

https://vida.io/documents/Ye5eGKJrfn3xBmnS3

Ответ 5

Я знаю, что вопрос старый, но в любом случае... лучше всего для больших данных является cytoscapejs (http://js.cytoscape.org/). Я работаю с библиотеками графов уже пару лет, и Cytoscape никогда не подводит меня.

В настоящее время я тестирую visjs, d3v5 и cytoscapejs v3 для действительно больших данных (даже 100k узлов и 300k ребер) для двух ситуаций: когда у меня фиксированные посты или нет. В то время как d3 работает неплохо, когда есть фиксированное положение и когда сила "выключена" в симуляции, cytoscape работает намного лучше для обеих ситуаций. Эта библиотека использует алгоритмы графиков для вычисления макета, вы можете применить даже свой собственный алгоритм для макета. Если вы хотите макет с силой, вы можете попробовать Springy тогда.

http://js.cytoscape.org/#layouts