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.