在这种特殊情况下,节点链接的良好性能算法

时间:2016-10-13 08:07:00

标签: javascript optimization graph datatables

我有一个典型的节点链接图 节点和链接是具有结构的json对象 节点

id:
type:....

链接

from: (nodeid)
to: (nodeid)
type:....

我当前的实现需要在提供nodeid时,获取直接关系并将其写入表(使用DataTable库的表) 我做了以下事情:

  //Building array of links that are related to that nodeid
  function setSelectedNodeLinks(node, links) {
  self.selectedNodeLinks = [];
  for (var i = 0; i < links.length; ++i) {
  if (node.id === links[i].nodeEndIdEntity ||node.id === links[i].nodeStartIdEntity)
  self.selectedNodeLinks.push(links[i]);
  }}

然后

   function updateEntitiesTable(selectedId) {
   var table = $("#TableGraphEntities").DataTable();
   for (var i = 0; i < table.rows()[0].length; i++) {
   var update = table.row(i).data();
   update._entityRelation = "";
    for (var r = 0; r < self.selectedNodeLinks.length; r++) {
        if (table.row(i).data().entityId !== selectedId) {
        if (table.row(i).data().entityId === self.selectedNodeLinks[r].nodeStartIdEntity || table.row(i).data().entityId === self.selectedNodeLinks[r].nodeEndIdEntity) {
                            update._entityRelation = self.selectedNodeLinks[r].relationType[0];
                            break;
                        }
                    } else {

                        break;
                    }
                }
                //table.row(i).data(update);
            }
            console.log("Done building table");
        }

但最终结果,当有500个节点时,非常慢(3,4秒)。我该如何优化呢?

1 个答案:

答案 0 :(得分:0)

除了可以使用的所有优化之外,在我的情况下,我在循环中使用了大量的DOM访问内容。只需简单的改变

table.row(i).data()

update

会给出好的结果。猜猜当实际代码还是一团糟时我不应该考虑不同的算法