Cococcreator 的游戏内存上去下不来, 求指导优化方案,谢谢!

H5游戏, 暂不需要 native 版本。

引擎版本 1.3.2

现在的现象是, 在大内存的手机上运行比较正常(测试用的4G内存的)。
在 iphone6及以下机器上, 出现浏览器crash.(基本上1G及以下的内存就会频繁出现闪退)

在浏览器中看, 运行一段时间后, 内存会升至400M 左右, 无法自动释放。现在场景页面已勾选“自动释放”,但无效果。
同时, 我们包装处理了 cc.loader.loadRes, (结尾处调用了 setAutoRelease(true)), 没有效果。求指导!

顶 问题一直存在 IOS下特别明显,单独搞demo的话又无法复现。
如果你能单独搞个崩溃demo给官方,就非常好了。

是浏览器进程还是 JS Heap 占用的内存?如果是进程升到 400M 一般是正常的。建议使用 Chrome 的 DevTools 调试看看内存开销具体是哪一部分出现上涨?如果是 JS Heap 的话内存泄露的可能性比较大。

如果希望自动释放 loadRes 加载的资源,那么应该在结尾处调用 setAutoReleaseRecursively 而不是 setAutoRelease

此外,资源可以适当做压缩,减少占用量,比如png8

loadRes : function( url,  type, completeCallback){
    return cc.loader.loadRes(url, type, function(err, res){
        if (completeCallback){
            completeCallback(err, res);
       }
       if(!err){
            cc.loader.setAutoReleaseRecursively(res, true);
       }
       
       
    });
},

我们包装了这样一个函数,发现一样没有效果~

这样用有问题吗?

没有问题,那内存泄露应该不是 loadRes 引起的。
不过内存下不来也不一定是内存泄露引起的,有可能是浏览器进程持有了空闲内存。

如果我在 场景A 加入了一个 , 添加了一个 NodeA, 这个Node 在 onLoad时 cc.game.addPersistRootNode(this.node);

NodeA 上绑定了组件 CompA, CompA 中有一个prefab 的 properties, 并正确被设置了。现在, 当我切换到场景B 时, CompA 的prefab 也会被释放掉吗?
(场景已设置自动释放)

会被释放,场景自动释放只会针对静态绑定的资源。动态更改的不会受到影响。如果要应用动态修改的操作,需要调用 cc.loader.setAutoRelease

问一下setAutoReleaseRecursively(prefab,true)
这里的prefab是指prefab的uuid吗?

@beijixing 效果如何?

asset 或者 uuid 都行

@linshun 我们用png8工具,对png 做了批量处理, 替换掉原来的资源。发现内存占用反而更多了。。。 需要什么特殊设置?

果然这样的问题到最后都是没人管的,我也遇到了一样的问题。