performance - Cytoscape.js 的性能和布局
问题描述
我正在测试 Cytoscape.js 的渲染性能。
我的图表包含大约 5000 个节点和 5000 个没有 x、y 位置的边,使用 Cytoscape.js 的自动布局。但是使用欧拉布局扩展渲染所有节点和边后需要15秒以上,图形页面的浏览器会在接下来的操作中卡住一段时间或响应缓慢。如前所述,Cytoscape.js 受到浏览器性能的限制。我们从 java 服务器客户端加载 json 数据,并使用 for 循环加载数据,然后使用 layout.run() 运行自动布局。如何利用大数据提高性能?
x,y 位置的数据会提高性能,对吧?但是我们不知道如何在 Java 中循环 x,y 位置。能给我看看么?Cytoscape.js 中的布局是否有 java 插件?
解决方案
Cytoscape.js 不可能用于实际的大数据(即 TB 或更多),因为它在浏览器中运行。即使对于像 5000 个节点和边缘这样的中等大小,15 秒对于 Cytoscape.js 来说也是正常的。
问题在于 JavaScript 在图形布局等任务中速度较慢,因为现代 CPU 具有越来越多的内核,并且 JavaScript 的并行实现(Web 工作者)对于具有许多短迭代步骤的算法具有过多的开销,其中所有线程的结果必须被集成。此外,据我所知,GPU 计算在 JavaScript 中更难完成。
这两个问题都可能在未来得到解决,而且 Cytoscape.js 的开发者 Max Franz 似乎非常积极和支持,所以如果 JavaScript 能够获得更好的并行化和 GPU 计算支持,我很肯定这会找到它的方式进入Cytoscape.js 很快。
现在你可以尝试一些解决方法:
- 图表总是一样的吗?然后您可以预先计算布局并将其加载为预设布局。
- 图表至少不经常改变吗?然后您可以缓存布局并仅在必要时重新计算它。
我不知道您所说的“在 Java 中循环 x,y 位置”是什么意思,您的意思是“在 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。
推荐阅读
- kubernetes - Kubernetes pod 优先级
- python - SeparableConv2D 是否包含 Depthwise 操作后的 Batch Normalization 和 Relu?
- python - 通过 xlsxwriter 添加迷你图而不在电子表格中写入数据
- python - 使用 MinGW-w64 时,如何解决 cython 中的“未定义的引用错误”错误?
- node.js - AWS.DynamoDB.DocumentClient.get 始终返回 null
- r - 最短路径网络
- c# - ASP.NET 配置的 lambda 语法如何工作?
- javascript - 在 head 部分编写脚本以在 body 中创建一个 DIV
- r - R 包 plm 中 Arellano-Bond 测试的 Windmeijer 校正
- r - R:将类型“列表”转换为数据框以转换为 excel - 文本挖掘