changed tempNodes array into a hash to improve performance

This commit is contained in:
Eric Rowell
2012-07-31 21:35:04 -07:00
parent ed8c5ab6b8
commit d5eee80c0e
5 changed files with 30 additions and 37 deletions

28
dist/kinetic-core.js vendored
View File

@@ -40,7 +40,7 @@ Kinetic.Global = {
BUBBLE_WHITELIST: ['mousedown', 'mousemove', 'mouseup', 'mouseover', 'mouseout', 'click', 'dblclick', 'touchstart', 'touchmove', 'touchend', 'tap', 'dbltap', 'dragstart', 'dragmove', 'dragend'],
stages: [],
idCounter: 0,
tempNodes: [],
tempNodes: {},
maxDragTimeInterval: 20,
drag: {
moving: false,
@@ -57,15 +57,20 @@ Kinetic.Global = {
},
_pullNodes: function(stage) {
var tempNodes = this.tempNodes;
for(var n = 0; n < tempNodes.length; n++) {
var node = tempNodes[n];
for(var key in tempNodes) {
var node = tempNodes[key];
if(node.getStage() !== undefined && node.getStage()._id === stage._id) {
stage._addId(node);
stage._addName(node);
this.tempNodes.splice(n, 1);
n -= 1;
this._removeTempNode(node);
}
}
},
_addTempNode: function(node) {
this.tempNodes[node._id] = node;
},
_removeTempNode: function(node) {
delete this.tempNodes[node._id];
}
};
@@ -2525,8 +2530,7 @@ Kinetic.Container = Kinetic.Node.extend({
var stage = child.getStage();
if(!stage) {
var go = Kinetic.Global;
go.tempNodes.push(child);
Kinetic.Global._addTempNode(child);
}
else {
stage._addId(child);
@@ -2562,15 +2566,7 @@ Kinetic.Container = Kinetic.Node.extend({
stage._removeName(child.getName(), child._id);
}
var go = Kinetic.Global;
for(var n = 0; n < go.tempNodes.length; n++) {
var node = go.tempNodes[n];
if(node._id === child._id) {
go.tempNodes.splice(n, 1);
break;
}
}
Kinetic.Global._removeTempNode(child);
this.children.splice(child.index, 1);
this._setChildrenIndices();

File diff suppressed because one or more lines are too long

View File

@@ -68,8 +68,7 @@ Kinetic.Container = Kinetic.Node.extend({
var stage = child.getStage();
if(!stage) {
var go = Kinetic.Global;
go.tempNodes.push(child);
Kinetic.Global._addTempNode(child);
}
else {
stage._addId(child);
@@ -105,15 +104,7 @@ Kinetic.Container = Kinetic.Node.extend({
stage._removeName(child.getName(), child._id);
}
var go = Kinetic.Global;
for(var n = 0; n < go.tempNodes.length; n++) {
var node = go.tempNodes[n];
if(node._id === child._id) {
go.tempNodes.splice(n, 1);
break;
}
}
Kinetic.Global._removeTempNode(child);
this.children.splice(child.index, 1);
this._setChildrenIndices();

View File

@@ -12,7 +12,7 @@ Kinetic.Global = {
BUBBLE_WHITELIST: ['mousedown', 'mousemove', 'mouseup', 'mouseover', 'mouseout', 'click', 'dblclick', 'touchstart', 'touchmove', 'touchend', 'tap', 'dbltap', 'dragstart', 'dragmove', 'dragend'],
stages: [],
idCounter: 0,
tempNodes: [],
tempNodes: {},
maxDragTimeInterval: 20,
drag: {
moving: false,
@@ -29,14 +29,19 @@ Kinetic.Global = {
},
_pullNodes: function(stage) {
var tempNodes = this.tempNodes;
for(var n = 0; n < tempNodes.length; n++) {
var node = tempNodes[n];
for(var key in tempNodes) {
var node = tempNodes[key];
if(node.getStage() !== undefined && node.getStage()._id === stage._id) {
stage._addId(node);
stage._addName(node);
this.tempNodes.splice(n, 1);
n -= 1;
this._removeTempNode(node);
}
}
},
_addTempNode: function(node) {
this.tempNodes[node._id] = node;
},
_removeTempNode: function(node) {
delete this.tempNodes[node._id];
}
};

View File

@@ -734,7 +734,7 @@ Test.prototype.tests = {
var go = Kinetic.Global;
test(go.tempNodes.length === 0, 'shouldn\'t be nodes in the tempNdoes array');
test(go.tempNodes[circle._id] === undefined, 'circle shouldn\'t be in the temp nodes hash');
layer.add(circle);
@@ -742,11 +742,12 @@ Test.prototype.tests = {
test(node === undefined, 'node should be undefined');
test(go.tempNodes.length === 1, 'tempNodes array should have one node');
test(go.tempNodes[circle._id].attrs.id === 'myCircle', 'circle should be in temp nodes');
layer.remove(circle);
test(go.tempNodes.length === 0, 'shouldn\'t be nodes in the tempNdoes array');
test(go.tempNodes[circle._id] === undefined, 'circle shouldn\'t be in the temp nodes hash');
},
'CONTAINER - remove layer with shape': function(containerId) {