Cocos 微信小游戏内存优化指南(iOS端)

会这么说是因为我们真的遇到过项目这些东西运行之后占用了上百 M 内存。业务代码当然是会使用引擎 api 的,所以也把引擎启动之后,游戏业务场景的内存算进来了。

内存这个没法准确计算,因为会有一部分 JS 引擎的优化编译缓存。内存的计算我们之前使用过一个插件: js-size 做初略的计算

image
普通模式下的GFX Buffer Mem
image
高性能模型下的GFX Buffer Mem
在高性能模式下,GFX Buffer值会很高,游戏玩久了,可能去到几百M,清理纹理对象时只能释放一点点,即时切换场景,资源全部释放,GFX Buffer的值也不会怎么下降。
在普通模式下,GFX Buffer的值不怎么高,通常维持在几十M。
请问是什么原因吗?

引擎的脚本内存大概占多少呢

在实际项目上,我们测试过在 3.6.1 版本,打包微信小游戏平台,发布运行在 iphone 8 设备上,加载引擎之后小游戏内存达到 191 MB。这个内存会包含小游戏基础库的内存,大概 70 MB,还有一些 JS 引擎的编译缓存。所以可以粗略定为占用 120 MB 左右。
这个测试的项目是个 2D 项目,基本把需要使用的 3D 模块都剔除了。剔除模块能有效减少引擎内存大小。
这里提醒注意,由于设备分辨率的不同,所以引擎启动时初始化的渲染内存大小也会不同。分辨率越大、游戏设置的 dpr 越大,内存占用越大。

你好,这个问题我们之前没注意到,后面我们找时间看下。


测试看,是由于sys.__isWebIOS14OrIPadOS14Env为true,mesh-buffer中执行了其他逻辑导致的


我用2.4.10版本测试,也问过腾讯的人员,得出结论是cocos对于mesh-buffer问题的判定范围太广了,误杀了较高的版本,建议屏蔽这里的判断,手动适配

3赞

根本问题是,buffer会越来越大,释放不了。尝试过在iOS14的系统上使用共享GPU Buffer的方式,在高性能模式下,帧率掉到了个位数。额,因为我用的3.6版本,不确定2.4.10版本是不是也是这个情况

GFX Texture Mem 表示纹理内存。
GFX Buffer Mem 具体是表示什么内容的数值呢?

这个GFX Buffer Mem表示的啥呀,他会导致游戏卡顿么?

图形绘制需要的顶点数据和纹理索引数据,以及各种 GL 程序中的缓存。详情请了解一下 Webgl 程序。

1赞

不会直接造成卡顿,但是内存过高容易导致游戏崩溃。

好,多谢。
GFX Texture Mem 和 原生里跑的时候的内存值有什么关系呢?
我加载了网络图片,总内存的增值会是GFX Texture Mem增值的两倍。
是说总内存包含GFX Texture Mem的值,还是说GFX Texture Mem的值只是gpu内存的值,而原生那边总值是cpu内存的值?

1赞

这样的文章很棒

如果资源同时存在astc和png,这时候使用zip的压缩类型会导致bundle包变得更大,这时候除了不使用zip还有其他好的解决办法吗?

战略mark

MarkMarkMark

战略mark

为什么不能把 所有逻辑都自动转换成wasm

微信小游戏优化眼