Производительность и макеты Cytoscape.js - PullRequest
0 голосов
/ 15 мая 2018

Я тестирую производительность рендеринга Cytoscape.js.

Мой график содержит около 5000 узлов и 5000 ребер без позиций x, y, используя автоматическую разметку Cytoscape.js.Но после рендеринга всех узлов и ребер требуется более 15 секунд с расширением макета Эйлера, браузер страницы графика на некоторое время застрянет или будет медленно реагировать в следующей операции.Как уже было сказано, Cytoscape.js ограничен производительностью браузеров.Мы загружаем данные json из клиента java-сервера и загружаем данные с помощью цикла for, затем используем layout.run () для запуска автоматической разметки.Как улучшить производительность с большими данными?

Данные с позициями x, y повысят производительность, верно?Но мы не знаем, как распространять позиции x, y в Java.Можешь ли ты показать мне?Есть ли java-плагин для раскладок в Cytoscape.js?

1 Ответ

0 голосов
/ 12 февраля 2019

Cytoscape.js невозможно использовать с большими данными (т. Е. Террабайтами или более), поскольку они запускаются в браузере. Даже для средних размеров, таких как 5000 узлов и ребер, 15 секунд звучат нормально для Cytoscape.js.

Проблема в том, что JavaScript медленнее в таких задачах, как верстка графов, потому что современные процессоры имеют все больше ядер, а реализация параллелизма JavaScript (веб-работники) имеет слишком много накладных расходов для алгоритмов со многими короткими итерационными шагами, где результат всех потоков должен быть интегрированным. Кроме того, насколько я знаю, вычисления на GPU сложнее в JavaScript.

Обе эти проблемы могут быть решены в будущем, и разработчик Cytoscape.js Макс Франц, кажется, чрезвычайно активен и поддерживает, поэтому, если JavaScript когда-либо получит лучшую параллелизацию и поддержку вычислений на GPU, я уверен, что это найдет его путь в Cytoscape.js в ближайшее время.

Пока вы можете попробовать некоторые обходные пути:

  • График всегда один и тот же? Затем вы можете предварительно рассчитать макет и загрузить его в качестве предустановленного макета.
  • График хотя бы редко меняется? Затем вы можете кэшировать макет и пересчитать его только при необходимости.

Я не знаю, что вы подразумеваете под "распространять позиции x, y в Java", вы имеете в виду "загрузить предустановленный макет в библиотеку JavaScript (!) Cytoscape.js"? Если это так, это объясняется здесь: http://js.cytoscape.org/#layouts/preset. В частности, вы определяете координаты x и y следующим образом:

let options = {
  name: 'preset',
  positions: ... // map of (node id) => (position obj); or function(node){ return somPos; }
...

Существуют также графические визуализации, которые имеют гораздо меньше возможностей, чем Cytoscape.js, но работают быстрее, поэтому, если вам не нужны какие-либо функции и вы просто хотите визуализировать простой график, вы можете попробовать ngraph см. демоверсию на http://www.yasiv.com/graphs#Bai/rw5151.

...