Cc.loader.loadRes调用多次会卡死

let filename = "bg/background_4"
let startTime = new Date().getTime()
for (var j = 0; j < 1000; j++) {
    cc.loader.loadRes(filename, cc.SpriteFrame, function (err, frame) {
        if (err) {
            cc.log(err.message || err);
            return;
        }
    });
}
let endTime = new Date().getTime()
cc.log("===eventTime", endTime - startTime)

每次调用上边代码,耗时会越来越长,跟踪了下代码,发现是在LoadingItems中的下边这个方法

LoadingItems.finishDep = function (depId) {
    for (var id in _queueDeps) {
        var queue = _queueDeps[id];
        // Found root queue
        if (queue.deps.indexOf(depId) !== -1 && queue.completed.indexOf(depId) === -1) {
            queue.completed.push(depId);
        }
    }
};

_queueDeps会越来越大,for循环耗时越来越久

1赞

@jare 说,下一个版本将会支持 loadRes 传递数组,调用 loadRes 1000 次这种事情的确是非常不建议的

非常欣赏楼主的研究精神!我们会努力改进的。

现在和这个问题解决了吗

cc.loader.loadRes 是同步加载吧, 这个计算时间有用吗

这个问题比较小众,1.4 会尝试解决。

是异步的,异步的话 endTime 就没用了

哦,对,是异步加载

这个问题怎么还没解决? 很影响性能的, 怎么却变成小众的问题?

很多东西都需要动态加载的,现在意思是尽量loadres在刚开始就全部加载完存起来吗?