cytoscape.js:提高设置节点属性数据的性能

时间:2013-02-09 23:55:06

标签: cytoscape.js

在cytoscape.js中,我正在尝试为329节点网络中的每个节点更改两个节点属性的值。

这有效,但需要86秒。我希望它会快得多。这是我的代码:

var data = // data of the form {lfc: {key1: 0.01, key2: 0.02, ...}, pval: {key1: 0.03,  key2: 0.04, ...}};
var nodes = cy.nodes();
console.log('starting to update node data...');
var start = new Date().getTime();
for (var i = 0; i < nodes.length; i++)
{
  var node = nodes[i];
  var id = node.data("id");
  var lfc = data['lfc'][id];
  var pval = data['pval'][id];
  node.data({lfc: lfc, pval: pval});
}
var end = new Date().getTime();
console.log("finished in " + (end - start) + "ms");

我知道如果我将网络中所有节点的属性设置为相同的值,它会更快。这需要大约半秒钟:

var start = new Date().getTime();
cy.nodes().data({lfc: 1.0, pval: 1.0});
var end = new Date().getTime();
console.log("finished in " + (end - start) + "ms");

但是因为我试图给每个节点个别值,所以我不能这样做。

提高绩效的任何想法?

1 个答案:

答案 0 :(得分:2)

在循环中调用函数的问题是每次迭代都会导致渲染器发生事件和通知 - 因为可能需要进行可视化更新。如您所述,批量添加/加载时不会出现问题,因为这只会生成一个通知。

理想的架构是在初始化cytoscape.js之前加载所需的所有元素,然后在服务器上更改时更新各个节点。轮询服务器并更新所有节点可能会导致除了加载性能之外的其他问题。