From 80940b8529024c3ecf25edd22740df30ce428d62 Mon Sep 17 00:00:00 2001 From: Paulo Gustavo Veiga Date: Sat, 7 Jul 2012 13:18:27 -0300 Subject: [PATCH] Minor performance improvement... --- .../src/main/javascript/ConnectionLine.js | 2 - mindplot/src/main/javascript/Designer.js | 2 +- mindplot/src/main/javascript/layout/Node.js | 65 +++++++------- .../main/javascript/layout/RootedTreeSet.js | 84 +++++++++---------- mindplot/src/main/javascript/model/Mindmap.js | 7 +- .../src/main/javascript/model/NodeModel.js | 2 +- .../persistence/XMLSerializer_Pela.js | 2 +- 7 files changed, 83 insertions(+), 81 deletions(-) diff --git a/mindplot/src/main/javascript/ConnectionLine.js b/mindplot/src/main/javascript/ConnectionLine.js index c8869fb4..83efabc5 100644 --- a/mindplot/src/main/javascript/ConnectionLine.js +++ b/mindplot/src/main/javascript/ConnectionLine.js @@ -139,9 +139,7 @@ mindplot.ConnectionLine = new Class({ else { x = -mindplot.Topic.CONNECTOR_WIDTH; } - console.log("conector:" + x + ", " + y); connector.setPosition(x, y); - } }, diff --git a/mindplot/src/main/javascript/Designer.js b/mindplot/src/main/javascript/Designer.js index a55a0145..fd012327 100644 --- a/mindplot/src/main/javascript/Designer.js +++ b/mindplot/src/main/javascript/Designer.js @@ -682,7 +682,7 @@ mindplot.Designer = new Class({ }); - var relIds = topics.map(function (rel) { + var relIds = relation.map(function (rel) { return rel.getId(); }); diff --git a/mindplot/src/main/javascript/layout/Node.js b/mindplot/src/main/javascript/layout/Node.js index a3f64900..fe7e379e 100644 --- a/mindplot/src/main/javascript/layout/Node.js +++ b/mindplot/src/main/javascript/layout/Node.js @@ -16,7 +16,7 @@ * limitations under the License. */ mindplot.layout.Node = new Class({ - initialize:function(id, size, position, sorter) { + initialize:function (id, size, position, sorter) { $assert(typeof id === 'number' && isFinite(id), "id can not be null"); $assert(size, "size can not be null"); $assert(position, "position can not be null"); @@ -31,90 +31,90 @@ mindplot.layout.Node = new Class({ this.setShrunken(false); }, - getId:function() { + getId:function () { return this._id; }, - setFree: function(value) { + setFree:function (value) { this._setProperty('free', value); }, - isFree: function() { + isFree:function () { return this._getProperty('free'); }, - hasFreeChanged: function() { + hasFreeChanged:function () { return this._isPropertyChanged('free'); }, - hasFreeDisplacementChanged: function() { + hasFreeDisplacementChanged:function () { return this._isPropertyChanged('freeDisplacement'); }, - setShrunken: function(value) { + setShrunken:function (value) { this._setProperty('shrink', value); }, - areChildrenShrunken: function() { + areChildrenShrunken:function () { return this._getProperty('shrink'); }, - setOrder: function(order) { + setOrder:function (order) { $assert(typeof order === 'number' && isFinite(order), "Order can not be null. Value:" + order); this._setProperty('order', order); }, - resetPositionState : function() { + resetPositionState:function () { var prop = this._properties['position']; if (prop) { prop.hasChanged = false; } }, - resetOrderState : function() { + resetOrderState:function () { var prop = this._properties['order']; if (prop) { prop.hasChanged = false; } }, - resetFreeState : function() { + resetFreeState:function () { var prop = this._properties['freeDisplacement']; if (prop) { prop.hasChanged = false; } }, - getOrder: function() { + getOrder:function () { return this._getProperty('order'); }, - hasOrderChanged: function() { + hasOrderChanged:function () { return this._isPropertyChanged('order'); }, - hasPositionChanged: function() { + hasPositionChanged:function () { return this._isPropertyChanged('position'); }, - hasSizeChanged: function() { + hasSizeChanged:function () { return this._isPropertyChanged('size'); }, - getPosition: function() { + getPosition:function () { return this._getProperty('position'); }, - setSize : function(size) { + setSize:function (size) { $assert($defined(size), "Size can not be null"); this._setProperty('size', Object.clone(size)); }, - getSize: function() { + getSize:function () { return this._getProperty('size'); }, - setFreeDisplacement: function(displacement) { + setFreeDisplacement:function (displacement) { $assert($defined(displacement), "Position can not be null"); $assert($defined(displacement.x), "x can not be null"); $assert($defined(displacement.y), "y can not be null"); @@ -124,30 +124,33 @@ mindplot.layout.Node = new Class({ this._setProperty('freeDisplacement', Object.clone(newDisplacement)); }, - resetFreeDisplacement: function() { + resetFreeDisplacement:function () { this._setProperty('freeDisplacement', {x:0, y:0}); }, - getFreeDisplacement: function() { + getFreeDisplacement:function () { var freeDisplacement = this._getProperty('freeDisplacement'); return (freeDisplacement || {x:0, y:0}); }, - setPosition : function(position) { + setPosition:function (position) { $assert($defined(position), "Position can not be null"); $assert($defined(position.x), "x can not be null"); $assert($defined(position.y), "y can not be null"); - this._setProperty('position', Object.clone(position)); + // This is a performance improvement to avoid movements that really could be avoided. + var currentPos = this.getPosition(); + if (currentPos == null || Math.abs(currentPos.x - position.x) > 2 || Math.abs(currentPos.y - position.y) > 2) + this._setProperty('position', position); }, - _setProperty: function(key, value) { + _setProperty:function (key, value) { var prop = this._properties[key]; if (!prop) { prop = { hasChanged:false, - value: null, - oldValue : null + value:null, + oldValue:null }; } @@ -160,21 +163,21 @@ mindplot.layout.Node = new Class({ this._properties[key] = prop; }, - _getProperty: function(key) { + _getProperty:function (key) { var prop = this._properties[key]; return $defined(prop) ? prop.value : null; }, - _isPropertyChanged: function(key) { + _isPropertyChanged:function (key) { var prop = this._properties[key]; return prop ? prop.hasChanged : false; }, - getSorter: function() { + getSorter:function () { return this._sorter; }, - toString: function() { + toString:function () { return "[id:" + this.getId() + ", order:" + this.getOrder() + ", position: {" + this.getPosition().x + "," + this.getPosition().y + "}, size: {" + this.getSize().width + "," + this.getSize().height + "}, shrink:" + this.areChildrenShrunken() + "]"; } diff --git a/mindplot/src/main/javascript/layout/RootedTreeSet.js b/mindplot/src/main/javascript/layout/RootedTreeSet.js index 74a2cf99..9750eb40 100644 --- a/mindplot/src/main/javascript/layout/RootedTreeSet.js +++ b/mindplot/src/main/javascript/layout/RootedTreeSet.js @@ -16,25 +16,25 @@ * limitations under the License. */ mindplot.layout.RootedTreeSet = new Class({ - initialize:function() { + initialize:function () { this._rootNodes = []; }, - setRoot:function(root) { + setRoot:function (root) { $assert(root, 'root can not be null'); this._rootNodes.push(this._decodate(root)); }, - getTreeRoots:function() { + getTreeRoots:function () { return this._rootNodes; }, - _decodate:function(node) { + _decodate:function (node) { node._children = []; return node; }, - add: function(node) { + add:function (node) { $assert(node, 'node can not be null'); $assert(!this.find(node.getId(), false), 'node already exits with this id. Id:' + node.getId()); $assert(!node._children, 'node already added'); @@ -42,13 +42,13 @@ mindplot.layout.RootedTreeSet = new Class({ }, - remove: function(nodeId) { + remove:function (nodeId) { $assert($defined(nodeId), 'nodeId can not be null'); var node = this.find(nodeId); this._rootNodes.erase(node); }, - connect: function(parentId, childId) { + connect:function (parentId, childId) { $assert($defined(parentId), 'parent can not be null'); $assert($defined(childId), 'child can not be null'); @@ -61,7 +61,7 @@ mindplot.layout.RootedTreeSet = new Class({ this._rootNodes.erase(child); }, - disconnect: function(nodeId) { + disconnect:function (nodeId) { $assert($defined(nodeId), 'nodeId can not be null'); var node = this.find(nodeId); $assert(node._parent, "Node is not connected"); @@ -71,7 +71,7 @@ mindplot.layout.RootedTreeSet = new Class({ node._parent = null; }, - find:function(id, validate) { + find:function (id, validate) { $assert($defined(id), 'id can not be null'); var graphs = this._rootNodes; @@ -89,7 +89,7 @@ mindplot.layout.RootedTreeSet = new Class({ }, - _find:function(id, parent) { + _find:function (id, parent) { if (parent.getId() == id) { return parent; @@ -107,12 +107,12 @@ mindplot.layout.RootedTreeSet = new Class({ return result; }, - getChildren: function(node) { + getChildren:function (node) { $assert(node, 'node cannot be null'); return node._children; }, - getRootNode: function(node) { + getRootNode:function (node) { $assert(node, "node cannot be null"); var parent = this.getParent(node); if ($defined(parent)) { @@ -122,12 +122,12 @@ mindplot.layout.RootedTreeSet = new Class({ return node; }, - getAncestors: function(node) { + getAncestors:function (node) { $assert(node, 'node cannot be null'); return this._getAncestors(this.getParent(node), []); }, - _getAncestors: function(node, ancestors) { + _getAncestors:function (node, ancestors) { var result = ancestors; if (node) { result.push(node); @@ -136,24 +136,24 @@ mindplot.layout.RootedTreeSet = new Class({ return result; }, - getSiblings: function(node) { + getSiblings:function (node) { $assert(node, 'node cannot be null'); if (!$defined(node._parent)) { return []; } - var siblings = node._parent._children.filter(function(child) { + var siblings = node._parent._children.filter(function (child) { return child != node; }); return siblings; }, - hasSinglePathToSingleLeaf: function(node) { + hasSinglePathToSingleLeaf:function (node) { $assert(node, 'node cannot be null'); return this._hasSinglePathToSingleLeaf(node); }, - _hasSinglePathToSingleLeaf: function(node) { - var children = this.getChildren(node); + _hasSinglePathToSingleLeaf:function (node) { + var children = this.getChildren(node); if (children.length == 1) { return this._hasSinglePathToSingleLeaf(children[0]); @@ -162,21 +162,21 @@ mindplot.layout.RootedTreeSet = new Class({ return children.length == 0; }, - isStartOfSubBranch: function(node) { + isStartOfSubBranch:function (node) { return this.getSiblings(node).length > 0 && this.getChildren(node).length == 1; }, - isLeaf: function(node) { + isLeaf:function (node) { $assert(node, 'node cannot be null'); return this.getChildren(node).length == 0; }, - getParent:function(node) { + getParent:function (node) { $assert(node, 'node cannot be null'); return node._parent; }, - dump: function() { + dump:function () { var branches = this._rootNodes; var result = ""; for (var i = 0; i < branches.length; i++) { @@ -186,7 +186,7 @@ mindplot.layout.RootedTreeSet = new Class({ return result; }, - _dump:function(node, indent) { + _dump:function (node, indent) { var result = indent + node + "\n"; var children = this.getChildren(node); for (var i = 0; i < children.length; i++) { @@ -197,7 +197,7 @@ mindplot.layout.RootedTreeSet = new Class({ return result; }, - plot: function(canvas) { + plot:function (canvas) { var branches = this._rootNodes; for (var i = 0; i < branches.length; i++) { var branch = branches[i]; @@ -205,7 +205,7 @@ mindplot.layout.RootedTreeSet = new Class({ } }, - _plot: function(canvas, node, root) { + _plot:function (canvas, node, root) { var children = this.getChildren(node); var cx = node.getPosition().x + canvas.width / 2 - node.getSize().width / 2; var cy = node.getPosition().y + canvas.height / 2 - node.getSize().height / 2; @@ -216,13 +216,13 @@ mindplot.layout.RootedTreeSet = new Class({ var fillColor = this._rootNodes.contains(node) ? "#000" : (node.isFree() ? "#abc" : "#c00"); rect.attr('fill', fillColor); - var rectPosition = {x: rect.attr("x") - canvas.width/2 + rect.attr("width")/2, y:rect.attr("y") - canvas.height/2 + rect.attr("height")/2}; - var rectSize = {width: rect.attr("width"), height:rect.attr("height")}; - rect.click(function() { - console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", freeDisplacement:(" + node.getFreeDisplacement().x + "," + node.getFreeDisplacement().y +")]"); + var rectPosition = {x:rect.attr("x") - canvas.width / 2 + rect.attr("width") / 2, y:rect.attr("y") - canvas.height / 2 + rect.attr("height") / 2}; + var rectSize = {width:rect.attr("width"), height:rect.attr("height")}; + rect.click(function () { + console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", freeDisplacement:(" + node.getFreeDisplacement().x + "," + node.getFreeDisplacement().y + ")]"); }); - text.click(function() { - console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", freeDisplacement:(" + node.getFreeDisplacement().x + "," + node.getFreeDisplacement().y +")]"); + text.click(function () { + console.log("[id:" + node.getId() + ", order:" + node.getOrder() + ", position:(" + rectPosition.x + "," + rectPosition.y + "), size:" + rectSize.width + "x" + rectSize.height + ", freeDisplacement:(" + node.getFreeDisplacement().x + "," + node.getFreeDisplacement().y + ")]"); }); for (var i = 0; i < children.length; i++) { @@ -231,7 +231,7 @@ mindplot.layout.RootedTreeSet = new Class({ } }, - updateBranchPosition : function(node, position) { + updateBranchPosition:function (node, position) { var oldPos = node.getPosition(); node.setPosition(position); @@ -240,48 +240,48 @@ mindplot.layout.RootedTreeSet = new Class({ var yOffset = oldPos.y - position.y; var children = this.getChildren(node); - children.forEach(function(child) { + children.forEach(function (child) { this.shiftBranchPosition(child, xOffset, yOffset); }.bind(this)); }, - shiftBranchPosition: function(node, xOffset, yOffset) { + shiftBranchPosition:function (node, xOffset, yOffset) { var position = node.getPosition(); node.setPosition({x:position.x + xOffset, y:position.y + yOffset}); var children = this.getChildren(node); - children.forEach(function(child) { + children.forEach(function (child) { this.shiftBranchPosition(child, xOffset, yOffset); }.bind(this)); }, - getSiblingsInVerticalDirection: function(node, yOffset) { + getSiblingsInVerticalDirection:function (node, yOffset) { // siblings with lower or higher order, depending on the direction of the offset and on the same side as their parent var parent = this.getParent(node); - var siblings = this.getSiblings(node).filter(function(sibling) { + var siblings = this.getSiblings(node).filter(function (sibling) { var sameSide = node.getPosition().x > parent.getPosition().x ? sibling.getPosition().x > parent.getPosition().x : sibling.getPosition().x < parent.getPosition().x; var orderOK = yOffset < 0 ? sibling.getOrder() < node.getOrder() : sibling.getOrder() > node.getOrder(); return orderOK && sameSide; }); - if (yOffset < 0 ) { + if (yOffset < 0) { siblings.reverse(); } return siblings; }, - getBranchesInVerticalDirection: function(node, yOffset) { + getBranchesInVerticalDirection:function (node, yOffset) { // direct descendants of the root that do not contain the node and are on the same side // and on the direction of the offset var rootNode = this.getRootNode(node); - var branches = this.getChildren(rootNode).filter(function(child) { + var branches = this.getChildren(rootNode).filter(function (child) { return this._find(node.getId(), child); }, this); var branch = branches[0]; - var rootDescendants = this.getSiblings(branch).filter(function(sibling) { + var rootDescendants = this.getSiblings(branch).filter(function (sibling) { var sameSide = node.getPosition().x > rootNode.getPosition().x ? sibling.getPosition().x > rootNode.getPosition().x : sibling.getPosition().x < rootNode.getPosition().x; var sameDirection = yOffset < 0 ? sibling.getOrder() < branch.getOrder() : sibling.getOrder() > branch.getOrder(); return sameSide && sameDirection; diff --git a/mindplot/src/main/javascript/model/Mindmap.js b/mindplot/src/main/javascript/model/Mindmap.js index 086fb17e..aca43a3d 100644 --- a/mindplot/src/main/javascript/model/Mindmap.js +++ b/mindplot/src/main/javascript/model/Mindmap.js @@ -111,14 +111,15 @@ mindplot.model.Mindmap = new Class({ }, findNodeById:function (id) { - var result; - for (var i = 0; i < this._branches; i++) { + var result = null; + for (var i = 0; i < this._branches.length; i++) { var branch = this._branches[i]; - result = branch.findNodeById(id) + result = branch.findNodeById(id); if (result) { break; } } + return result; } } ); diff --git a/mindplot/src/main/javascript/model/NodeModel.js b/mindplot/src/main/javascript/model/NodeModel.js index 7031e5c1..d4eeb8e4 100644 --- a/mindplot/src/main/javascript/model/NodeModel.js +++ b/mindplot/src/main/javascript/model/NodeModel.js @@ -189,7 +189,7 @@ mindplot.model.NodeModel = new Class({ findNodeById : function(id) { var result = null; if (this.getId() == id) { - return this; + result = this; } else { var children = this.getChildren(); for (var i = 0; i < children.length; i++) { diff --git a/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js b/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js index ece2f9c2..19e4f9f2 100644 --- a/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js +++ b/mindplot/src/main/javascript/persistence/XMLSerializer_Pela.js @@ -411,7 +411,7 @@ mindplot.persistence.XMLSerializer_Pela = new Class({ return null; } // Is the connections points valid ?. If it's not, do not load the relationship ... - if (mindmap.findNodeById(srcId) == null || mindmap.findNodeById(destId)) { + if (mindmap.findNodeById(srcId) == null || mindmap.findNodeById(destId)==null) { return null; }