前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >小游戏内存优化与性能优化

小游戏内存优化与性能优化

作者头像
腾讯NEXT学位
发布于 2018-09-12 11:53:48
发布于 2018-09-12 11:53:48
9.2K1
举报
文章被收录于专栏:腾讯NEXT学位腾讯NEXT学位

| 导语 听说你的小游戏内存超标?进来了解一下吧。

本文主要跟大家一起来探讨一下Cocos Creator小游戏开发过程中内存优化、性能优化和包体优化。

一、内存优化

因为 iOS小游戏和微信共用同一个进程,而微信在连续两次收到系统内存警告的时候会关闭小游戏并释放小游戏占用的内存。如果你的小游戏有外网用户反馈“闪退”,或者你自己测试的时候频繁出现“该小程序可能导致微信响应变慢被终止”等提示,那么就应该是时候优化你的小游戏内存了!

1、优化双份纹理(必做!)

在你的项目中添加如下代码,就可以减少大量内存:

这里面的原理是,当Creator使用DOM的Image对象去加载一个图片资源的时候,微信底层的引擎会解码图片数据,同时往GPU上传一份纹理,然后引擎的Sprite在渲染的时候会使用这个DOM Image再生成一份GPU纹理并上传,导致GPU里面存在双份纹理。使用 Image.scr = '' 可以释放掉GPU里面多出来的一份纹理,同时也会释放CPU端解码的纹理内存。所以,基本上对 Image对象调用了 src = '' 这个操作,这个Image对象占用的内存就释放干净了。

之前尝试使用DOM Image pool,当一个图片资源解码成功并且上传GPU以后,把这个Image对象的src置空后放入池子,然后重复利用。不过对比了一下内存占用,感觉 src = '' 之后内存立即就释放了,优化作用并不是很明显。

2、优化图集

最好对所有的碎图资源进行图集合并(Creator自带一个自动图集合并工具),并且最大限度填满图集,不要留有太多空白。图集的大小尽可能限制在1024*1024以下,因为有些图片有不少透明像素,合并图集的时候可以trim掉这些透明像素。另外合图还可以优化Drawcall,减少图片读取和解码操作,对性能也有一定优化。

另外,对于显示效果要求不高的界面,可以适当降低图片的尺寸。

3、优化Label

Creator1.9.3之前的版本,每创建一个系统字体就会生成一个离屏的Canvas对象,然后保存这个Canvas对象的context,每次draw一个系统字体的时候会调用这个context的fillText方法生成一张纹理并渲染。1.9.3以后我提交了一个优化,所有的系统字体渲染共享一个离屏Canvas,这样大概可以优化30M左右的内存(不同的项目效果不一样)。

老引擎参考PR地址:

optimization label memory #2693 fix label rendering issue #2880 (这个PR主要是Bug修复)

4、优化资源释放

对于二级弹框和场景资源释放,可以使用cc.loader.release接口配合场景的“自动释放”属性来实现 。

对于一个二级面板,我们可以约定这个二级面板引用的资源范围。我们把游戏中共用的资源放到Common图集中,把每个二级面板的资源放到自己的图集中。当释放资源的时候,我们可以通过 cc.loader.getDependsRecursively(‘prefab url’) API拿到面板Prefab所引用的所有资源,然后对这个返回的资源数组做资源释放。

比如,在我们的项目里面,释放资源的时候,我排除了Common,Main,Game/FX目录下面的图集资源:

 场景的资源释放只需要勾选一个属性就可以了:

二、性能优化

目前小游戏的性能瓶颈大多在JS层面,可以使用Chrome先去profiles性能热点,然后针对性地去做优化。

这里给出几点优化建议:

1、游戏中频繁更新的文字,推荐使用BMFont,系统字体会比较消耗性能。

2、优化Drawcall,尽可能减少Drawcall数量。

3、减少Mask组件的使用,该组件会导致游戏中的Drawcall数量变多。

4、禁用引擎的culling,禁用方法cc.macro.ENABLE_CULLING = false。

5、如果使用物理引擎,可以把物理引擎的step间隔调大。

6、优化节点树,减少节点数量。

7、场景中不要挂载过多的Prefab,可适当将一些Prefab变成动态加载的。

三、包体优化

因为微信小游戏对于包体有4M的限制,最近才刚开始升到8M,但是必须要分包,而且每一个分包的大小还是不能超过4M。

下面给出一些优化建议:

1、首包中不要包含过多的资源,如果一定要包含,请务必压缩。对于背景图片可以使用JPG,PNG图片可以使用png8进行压缩。

2、代码必须使用uglify进行压缩,尤其是第三方库,游戏代码如果使用release构建引擎有做uglify。如果想进一步压缩代码体积,需要考虑使用Google Closure Compiler进行高级压缩。

3、不需要动态加载的图片资源不要放到resources目录,放到此目录的资源在构建导出的时候,会生成资源映射关系到Settings.js中,会导致该Settings.js文件变大。另外为了防止缓存问题,需要使用md5,此时Settings.js文件会进一步膨胀。过气的活动Prefab也可以移出resources目录,所以定期资源清理也是必要的。

4、Settings.js文件优化,可以自己写脚本把md5Map里面的rawAssets的md5映射存到原本的rawAssets中,然后在boot.js里面还原md5Map即可。优化之后的Settings.js长这个样子:

boot.js里面还原md5AssetMap的的代码:

5、一定要使用release模式构建,这种方式构建出来的json资源会压缩,Settings.js也会优化。

6、对于引擎不使用的模块进行裁剪,这个可以减少引擎大小。

---------------------------------------------------------------

原文作者:腾讯工程师屈光辉。

来源:腾讯内部KM论坛。

你也想成为腾讯工程师?

也想年终奖人手一部 Iphone X?

那就快加入前端NEXT学位吧!

前端NEXT学位课程第八期火热招生中!

上腾讯课堂官网搜索Next学位还有大量免费体验课等你哟~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯NEXT学位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问优化双份纹理中this.image是什么?
请问优化双份纹理中this.image是什么?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
微信小游戏性能优化
| 导语【整合cocos博客、微信小游戏及laya性能优化官方文档总结并实践】业务中实践cocos导出的微信小游戏性能优化案例,希望对大家有所帮助~
EchoROne
2022/12/29
3.1K0
微信小游戏性能优化
Cocos 小白的性能优化探索
近期使用了 cocos creator 来开发一些游戏化的课中互动。Cocos 是一个优秀的国产游戏引擎,可以通过 Javascript 写出跨平台的游戏。看完文档,吭哧吭哧搞完,看似完美运行,然而体验会上,大家却提出加载时黑屏时间长、手机发烫严重、闪退、卡顿等问题。头疼,只能想办法优化。 经过几天的优化,性能才渐渐达标,其间踩了不少坑,所以打算将一些性能问题排查和优化的手段记录起来,分享给有需要的同学。 虽然 Cocos 属于游戏开发范畴,但与前端开发中遇到的性能问题还是有很多共通之处,无非是加载速度、C
用户1097444
2022/06/29
2.9K0
Cocos 小白的性能优化探索
实战PerfDog优化小游戏性能
背景: 我们的引擎是Egret,使用的是原生的EUI,转微信小游戏; 工程第一版出来后使用PerfDog测试一波数据。结果发现很多问题,本文主要分两部分
WeTest质量开放平台团队
2020/08/25
1K0
想做更深入的加载优化?剖析Cocos引擎底层架构后,乐府大佬交出「90分答案」
引言:无论是对引擎研发团队或是游戏开发团队来说,优化的重要性都不言而喻。本次,来自乐府互娱的「乐府小学生」在实际项目开发中,通过修改引擎源码实现了更加深入的加载优化。
张晓衡
2023/02/23
2.7K0
想做更深入的加载优化?剖析Cocos引擎底层架构后,乐府大佬交出「90分答案」
连“捉阔”是什么都不知道就不要混了!如何优化看这里!
在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现。
张晓衡
2020/07/09
2.3K0
连“捉阔”是什么都不知道就不要混了!如何优化看这里!
如何快速优化手游性能问题?从UGUI优化说起
作者Feefi,加入腾讯多年,目前主要从事Unity项目UI开发及优化相关工作,曾获得国际软件设计大赛“成都创业金钥匙”奖。
WeTest质量开放平台团队
2018/10/29
1.6K0
使用Laya引擎开发微信小游戏
使用一个简单的游戏开发示例,由浅入深,介绍了如何用Laya引擎开发微信小游戏。
腾讯大讲堂
2018/11/28
6.6K0
使用Laya引擎开发微信小游戏
【3.x合批亲测】使用这个优化方案,iPhone6也能飞起来,直接拉满60帧!
上周我花了3天的时间,体验测试了一款 Creator 3.x 性能优化工具:98K动态分层合批!
张晓衡
2023/02/23
1.8K0
【3.x合批亲测】使用这个优化方案,iPhone6也能飞起来,直接拉满60帧!
过亿月流水H5游戏优化分享、腾讯自研H5游戏优化分享、Layabox官方优化分享,全在这里了!
讲到优化,嘉宾们几乎都会提到优化与调试工具,掌握工具是性能优化的基础。那么都有哪些工具呢?常用的有三个:
Layabox Charley
2019/05/10
2.7K0
过亿月流水H5游戏优化分享、腾讯自研H5游戏优化分享、Layabox官方优化分享,全在这里了!
​Cocos Creator入门实战:桌球小游戏
在开始桌球小游戏之前,我们需要对creator有一定了解以及熟悉,对js语法有一定的了解。在开始同样还是希望大家能够仔细的阅读一遍官方文档,以便理解。
张晓衡
2019/09/11
2.6K0
​Cocos Creator入门实战:桌球小游戏
【Unity面试篇】Unity 面试题总结甄选 |Unity性能优化 | ❤️持续更新❤️
Unity中,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。 降低DrawCall的方法:
呆呆敲代码的小Y
2023/07/24
2.5K0
【Unity面试篇】Unity 面试题总结甄选 |Unity性能优化 | ❤️持续更新❤️
游戏性能优化
异名最近负责了一个微信小游戏的项目,在版本迭代间隙对游戏的性能调优进行了一次尝试。这个游戏是个打击类游戏,下面展示一下游戏的预览效果? 性能指标 引擎和小游戏都有提供一个性能面板,给开发者们暴露了下面
异名
2020/07/03
1.9K0
游戏性能优化指南:如何将HTML5性能发挥到极致
HTML5作为新兴领域越来越热。然而在移动设备硬件性能弱于PC的背景下,对性能的需求显得更为重要,而HTML5性能优化前与优化后有着极大的差别,如何优化才能提高性能,对此熟知的人很少。本文以LayaAir引擎为例,通过代码示例详细阐述如何利用引擎对HTML5作出性能的极致优化。
Layabox Charley
2019/05/13
3.3K0
游戏性能优化指南:如何将HTML5性能发挥到极致
《欢乐坦克大战》微信小游戏开发总结
木桶
2018/01/02
9.2K10
《欢乐坦克大战》微信小游戏开发总结
微信小游戏的内存调优指南
在开发微信小游戏的过程中,开发者往往会遇到很多内存问题,如内存泄漏或者内存溢出等。对目前几款微信创意小游戏进行测试发现,微信小游戏运行时的异常Crash多是由于内存占用过多造成的。为了方便开发者调优小游戏内存,本文从开发、测试与现网不同阶段介绍我们常见的内存分析与调优工具。
WeTest质量开放平台团队
2020/11/17
2.6K0
Creator 2.x 大项目卡顿有救了!
这对于每一个想用Creator做个大项目或者正在做着项目的小伙伴来说都是很难受的。
张晓衡
2021/07/07
1.7K0
Creator 2.x 大项目卡顿有救了!
显存优化:纹理压缩功能介绍与使用说明
纹理是指物体表面的纹路样式和细腻程度等外观效果。在计算机图形学中,常用于描述三维模型表面图案的二维图形。
Layabox Charley
2020/10/22
3.8K0
显存优化:纹理压缩功能介绍与使用说明
Shopee Games 游戏引擎演进之路
Shopee Games 当前以休闲类游戏为主,为了减少对 Shopee App 体积的影响,技术选型上会偏向于 H5 游戏。而如何选择 H5 游戏引擎,我们主要考量以下几个方面的因素:
Shopee技术团队
2022/03/04
1.7K0
Shopee Games 游戏引擎演进之路
Cocos Creator 3D 正式开放公测,赶紧上车!
大家好,转眼距离上一篇公测版本发布的帖子已经过去两个月,Cocos Creator 3D 终于要正式面向所有开发者开放了!如果你已经迫不及待想要尝试,请直接拉到文章末尾,你会找到所有你需要的内容。
张晓衡
2019/09/11
1.8K0
Cocos Creator 3D 正式开放公测,赶紧上车!
2D MMO中角色动画的优化总结
在深圳Cocos沙龙上,有幸结识了社区中大名顶顶的Colin,Shawn在社区论坛上第一次看到Colin的团队用CocosCreator制作的《热血暗黑》时就被深深地震撼到了!更为重要的是,Colin将他的技术心得和宝贵开发经验写成文字,每一篇分享都是满满的干货。而且幸运的是Shawn得到Colin的授权许可,将他的文章散播到奎特尔星球,我们一起欣赏一起成长!
张晓衡
2019/09/11
1.3K0
2D MMO中角色动画的优化总结
推荐阅读
相关推荐
微信小游戏性能优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档