perf: container sorting
This commit is contained in:
parent
866407e31d
commit
c5dbadb66e
|
@ -240,9 +240,22 @@ export default class Container extends Renderable {
|
||||||
child.sort();
|
child.sort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.$$children.sort((l, r) => l.$$zIndex - r.$$zIndex);
|
// Double insertion sort, because mostly-sorted is the usual case.
|
||||||
|
for (let i = 1; i < this.$$children.length; i++) {
|
||||||
|
const current = this.$$children[i];
|
||||||
|
const currentChild = this.container.isFake ? undefined : this.container.children[i];
|
||||||
|
let j = i - 1;
|
||||||
|
while ((j > -1) && (current.$$zIndex < this.$$children[j].$$zIndex)) {
|
||||||
|
this.$$children[j + 1] = this.$$children[j];
|
||||||
if (!this.container.isFake) {
|
if (!this.container.isFake) {
|
||||||
this.container.children = this.$$children.map((child) => child.internal);
|
this.container.swapChildren(this.container.children[j], this.container.children[j + 1]);
|
||||||
|
}
|
||||||
|
j--;
|
||||||
|
}
|
||||||
|
this.$$children[j + 1] = current;
|
||||||
|
if (!this.container.isFake) {
|
||||||
|
this.container.swapChildren(currentChild, this.container.children[j + 1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user