From 54e420e50fd7b3ab910aa6106c27747713026939 Mon Sep 17 00:00:00 2001 From: Joao Menighin Date: Fri, 9 Mar 2018 23:57:00 -0300 Subject: [PATCH 1/3] Improving the way _updateState deals with deleted edges --- lib/network/modules/Clustering.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/network/modules/Clustering.js b/lib/network/modules/Clustering.js index 6d9a1a59e..29a4c20bc 100644 --- a/lib/network/modules/Clustering.js +++ b/lib/network/modules/Clustering.js @@ -1222,7 +1222,7 @@ class ClusterEngine { _updateState() { let nodeId; let deletedNodeIds = []; - let deletedEdgeIds = []; + let deletedEdgeIds = {}; /** * Utility function to iterate over clustering nodes only @@ -1273,7 +1273,7 @@ class ClusterEngine { util.forEach(this.clusteredEdges, (edgeId) => { let edge = this.body.edges[edgeId]; if (edge === undefined || !edge.endPointsValid()) { - deletedEdgeIds.push(edgeId); + deletedEdgeIds[edgeId] = true; } }); @@ -1282,8 +1282,8 @@ class ClusterEngine { // So the cluster nodes also need to be scanned for invalid edges eachClusterNode(function(clusterNode) { util.forEach(clusterNode.containedEdges, (edge, edgeId) => { - if (!edge.endPointsValid() && deletedEdgeIds.indexOf(edgeId) === -1) { - deletedEdgeIds.push(edgeId); + if (!edge.endPointsValid() && !deletedEdgeIds[edgeId]) { + deletedEdgeIds[edgeId] = true; } }); }); @@ -1309,7 +1309,7 @@ class ClusterEngine { } if (!edge.endPointsValid() || !isValid) { - deletedEdgeIds.push(edgeId); + deletedEdgeIds[edgeId] = true; } }); @@ -1325,7 +1325,7 @@ class ClusterEngine { } edge.clusteringEdgeReplacingIds = this._filter(edge.clusteringEdgeReplacingIds, function(id) { - return deletedEdgeIds.indexOf(id) === -1; + return !deletedEdgeIds[id]; }); }); From 46571b5434526a8dd15c90e9585de9fae49d848f Mon Sep 17 00:00:00 2001 From: Joao Menighin Date: Sat, 10 Mar 2018 00:43:55 -0300 Subject: [PATCH 2/3] Realized can't simply use it as a Set to check existence. Set the value as the edgeId as well. --- lib/network/modules/Clustering.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/network/modules/Clustering.js b/lib/network/modules/Clustering.js index 29a4c20bc..d6b113e43 100644 --- a/lib/network/modules/Clustering.js +++ b/lib/network/modules/Clustering.js @@ -1273,7 +1273,7 @@ class ClusterEngine { util.forEach(this.clusteredEdges, (edgeId) => { let edge = this.body.edges[edgeId]; if (edge === undefined || !edge.endPointsValid()) { - deletedEdgeIds[edgeId] = true; + deletedEdgeIds[edgeId] = edgeId; } }); @@ -1283,7 +1283,7 @@ class ClusterEngine { eachClusterNode(function(clusterNode) { util.forEach(clusterNode.containedEdges, (edge, edgeId) => { if (!edge.endPointsValid() && !deletedEdgeIds[edgeId]) { - deletedEdgeIds[edgeId] = true; + deletedEdgeIds[edgeId] = edgeId; } }); }); @@ -1309,7 +1309,7 @@ class ClusterEngine { } if (!edge.endPointsValid() || !isValid) { - deletedEdgeIds[edgeId] = true; + deletedEdgeIds[edgeId] = edgeId; } }); From 52ed6a9cac1b613e29f838002ef50b99d5cf7905 Mon Sep 17 00:00:00 2001 From: Joao Menighin Date: Sat, 10 Mar 2018 00:45:55 -0300 Subject: [PATCH 3/3] Removing the 1 line that was making my clustering take 10 seconds to load instead of 1! =D That clone was is not needed once we just clone and check for the join condition. --- lib/network/modules/Clustering.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/network/modules/Clustering.js b/lib/network/modules/Clustering.js index d6b113e43..5e862901c 100644 --- a/lib/network/modules/Clustering.js +++ b/lib/network/modules/Clustering.js @@ -161,8 +161,7 @@ class ClusterEngine { // collect the nodes that will be in the cluster util.forEach(this.body.nodes, (node, nodeId) => { - let clonedOptions = NetworkUtil.cloneOptions(node); - if (options.joinCondition(clonedOptions) === true) { + if (node.options && options.joinCondition(node.options) === true) { childNodesObj[nodeId] = node; // collect the edges that will be in the cluster