因为开发的游戏zindex修改频繁 就仔细查看了一下zindex修改了之后的代码调用
发现zindex修改调用到了cc.Node的sortAllChildren方法
然后先来无聊就做了个对比
由于对比是在Windos的Web做的 浏览器:Chrome
希望大佬给我一个解答我实在是有点好奇
sortAllChildren
和浏览器自带的sort算法性能差了好几倍
特别是Children数量多的情况下如果zindex变化比较大 性能消耗就特别严重
比较 数量:100
Cocos sortAllChildren:33 sortAllChildren: 0.1845703125ms
Cocos sortAllChildren:44 sort: 0.044921875ms
Cocos sortAllChildren:30 比较 数量:500
Cocos sortAllChildren:33 sortAllChildren: 1.918701171875ms
Cocos sortAllChildren:44 sort: 0.166015625ms
Cocos sortAllChildren:30 比较 数量:1000
Cocos sortAllChildren:33 sortAllChildren: 1.419921875ms
Cocos sortAllChildren:44 sort: 0.447998046875ms
Cocos sortAllChildren:30 比较 数量:10000
Cocos sortAllChildren:33 sortAllChildren: 55.928955078125ms
Cocos sortAllChildren:44 sort: 2.71923828125ms
我也不知道为啥我不能传图
比较用代码
function sortAllChildren(_children) {
if (_children.length > 1) {
// insertion sort
var len = _children.length, i, j, child;
for (i = 1; i < len; i++) {
child = _children[i];
j = i - 1;
while (j >= 0) {
if (child._localZOrder < _children[j]._localZOrder) {
_children[j + 1] = _children[j];
} else {
break;
}
j–;
}
_children[j + 1] = child;
}
}
}
function bijiao(num=10000) {
var list = [];
for (let key = 0; key < num; key++) {
list.push({
_localZOrder: Math.ceil(Math.random() * 36000)
})
}
console.log(“比较 数量:” + num)
console.time(“sortAllChildren”)
sortAllChildren(list)
console.timeEnd(“sortAllChildren”)
var list = [];
for (let key = 0; key < num; key++) {
list.push({
_localZOrder: Math.ceil(Math.random() * 36000)
})
}
console.time(“sort”)
list.sort(function(c1, c2) {
return c1._localZOrder - c2._localZOrder
})
console.timeEnd(“sort”)
}
bijiao(100);
bijiao(500);
bijiao(1000);
bijiao(10000);