D3 заставляет визуализацию макета работать очень медленно при использовании большого набора данных? - PullRequest
17 голосов
/ 11 октября 2011

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

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

Ответы [ 5 ]

12 голосов
/ 18 октября 2011

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

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

6 голосов
/ 17 марта 2012

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

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

4 голосов
/ 04 января 2012

Возможно, вы захотите попробовать GraphGL для визуализации больших сетей в Интернете: https://gephi.org/2011/gsoc-mid-term-graphgl-network-visualization-with-webgl/

2 голосов
/ 07 июля 2014

Для более чем 1 тыс. Элементов в силовом макете рассмотрите возможность использования canvas вместо svg. Это может помочь с производительностью рендеринга. Смотрите пример здесь:

https://vida.io/documents/Ye5eGKJrfn3xBmnS3

0 голосов
/ 03 июля 2019

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

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

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

...