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

这篇具有很好参考价值的文章主要介绍了Cocos 微信小游戏内存与性能优化指南(iOS端)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

由于微信小游戏普通模式是基于 C++ 渲染层与 JS 编译引擎在原生平台模拟 HTMLCanvas 渲染能力的方案,其中 JS 代码的编译执行效率会极大影响游戏运行的性能。通常 JS 引擎都提供了 JIT 能力用于提高编译速度,这使得小游戏能够在 Android 端取得优异的性能。但是在 IOS 端由于系统安全策略限制 JS 引擎使用 JIT 功能,导致小游戏在 iOS 端的性能一直差强人意。

微信小游戏提供的高性能模式,通过转用微信内部的 Webkit 运行游戏的方式,使得在 iOS 上的小游戏,也能拥有 JIT 能力,大幅度提升运行性能。

从微信小游戏官方文档的水族馆测试中,我们可以看到,同样的场景,在 iPhone11 Pro Max 上,高性能模式下达到了 49 FPS,普通模式下却只有 13 FPS。

微信小游戏内存优化,ios,微信,性能优化,cocoa,macos

本文将从以下四个方面进行讲解:

  • 高性能模式

  • 运行时内存结构

  • 内存问题诊断

  • 内存优化技巧

因为内存问题在 Android 端表现良好,在 iOS 端反馈较多,所以本文仅对 iOS 端内存优化做介绍。

高性能模式

有关高性能模式的介绍以及使用方法请详细阅读微信小游戏开发文档:高性能模式(可长按文末二维码)。

开通方式

  1. 登录微信公众平台 -> 首页能力地图模块 -> 点击进入"生产提效包" -> 点击开通高性能模式。

  2. 开通成功后,通过配置 game.json 的 iOSHighPerformance 为 true 则可进入高性能模式。

  3. Cocos Creator 3.7 之后,可以直接在项目->构建发布面板上勾选高性能模式

通过去掉此开关可以正常回退到普通模式,以便两种模式对比。

注意问题

  1. 高性能模式下,游戏将拥有更好的渲染性能和表现,但是它对游戏的内存要求更加严格。

  2. 在高性能模式下,小游戏运行于浏览器内核环境,所以兼容性、内存消耗、稳定性等方面需要单独进行测试,不能复用普通模式的测试结果。

  3. 在 iOS 设备中, iphone 6s/7/8 等 2G RAM 机型的内存限制为 1G,iphone 7P/8P/iPhoneX/XR/XSAMX/11 等 3G RAM 机型的内存限制为 1.4G,一旦应用程序的内存占用超过这个阀值,就会被系统杀掉进程。因此开发者务必保证内存峰值不超过该数值。

  4. 如果游戏没做好内存优化,不建议开启高性能模式,否则在 iOS 低端机容易出现内存异常退出的情况,如有内存问题,可参考本文的内存优化技巧,充分优化内存。

运行时内存

微信小游戏内存优化,ios,微信,性能优化,cocoa,macos

从上图中可以看到,运行时内存一共由 6 个部分组成。

JavaScript Heap

在高性能模式下,小游戏运行于浏览器内核环境,因此 JavaScript Heap 包含游戏逻辑代码内存。通常我们可以打包 web-mobile 端,使用 Mac 平台的 Safari 浏览器的调试工具来远程调试手机 safari 的内存情况。需要注意的是 JavaScript Heap 通常无法看出具体物理内存使用。

WASM 资源

为了提高 JS 模块的执行性能,比如物理引擎的计算,我们会将一些 C++ 代码直接编译成 WASM 代码片段来达到优化性能的需求。比如 Cocos Creator 部分引用的第三方物理库就是 WASM 版本。

基础库和 Canvas

基础库可以理解为微信小游戏的黑盒环境暴露的 API 封装,可以防止将浏览器内核环境 API 暴露给开发者,实际测试基础库内存占用在 70M 左右。小游戏环境第一个创建的 Canvas 是主 Canvas,也是唯一可以将渲染表面同步到主界面的 Canvas,即呈现我们游戏的渲染表现。Canvas 的内存占用跟 Canvas 的宽高大小成正比。

音频文件

音频文件内存是指加载到内存的音频实例。

GPU 资源

比如顶点数据缓存,索引数据缓存,纹理缓存和渲染表面缓存等等。

内存问题诊断

下面给大家介绍一些常用的 iOS 内存诊断工具,它们可以辅助我们快速定位内存问题,找出解决办法。

常用 iOS 设备内存查看工具

  • Xcode 自带的 Instrument 分析工具

  • Perfdog 工具

  • 微信开发者工具

注意:iOS 端小游戏的进程名称在不同模式下有区别。

  • 高性能模式:含有 WebContent

  • 普通模式:含有 WeChat

XCode Instruments

微信小游戏内存优化,ios,微信,性能优化,cocoa,macosXCode Instruments 是 XCode 自带的应用程序运行时分析工具,它同样适用于微信小游戏进程。

使用 Activity Monitor,选择对应的设备 all processes 捕捉,等进程列表刷新后,输入 webkit 进行过滤,即可看到所有进程的 CPU 与内存情况.

微信小游戏内存优化,ios,微信,性能优化,cocoa,macos

Perfdog

Perfdog(性能狗)是一个 iOS/Android/PC/主机平台的性能测试和分析工具,具体使用方式请参考: https://perfdog.qq.com/

选择对应的设置-进程名,即可看到相关性能数据。

可以参考【开发阶段内存调优:把一切都控制在最开始 | 微信开放文档】: https://developers.weixin.qq.com/minigame/dev/guide/performance/perf-action-memory-dev-profile.html

微信开发者工具

微信开发者工具主要使用它的调试器来跟踪内存数据,操作流程如下:

  1. 进入调试开发者工具界面

  2. 将 【Memory】勾选,然后刷新游戏

  3. 点击下图左上角的小圆圈按钮开始录制

  4. 结束录制后,就会显示下图界面

我们主要关注两个波形图,一个是 Main 波形图,用于查看逻辑帧调用栈,一个是 JS Heap 的峰值曲线,用于观察内存增长变化。如果我们观察到某个时刻 JS Heap 值增加,然后我们就可以查看逻辑帧调用栈大概确认数据来源。

微信小游戏内存优化,ios,微信,性能优化,cocoa,macos

通过上述步骤可以分析出游戏的 JS 内存分布,然后当我们要确定某块 JS 内存的来源与释放情况,就需要用到下面的内存泄漏检测工具 - 实时内存诊断

微信小游戏内存优化,ios,微信,性能优化,cocoa,macos

具体操作步骤如下:

  1. 点击左上角的小圆圈按钮,会进入下面的录制按钮,柱状图的出现表示某个内存块的创建,消失标识内存块被释放。左上角的垃圾桶按钮是主动触发 JS引擎的 GC 的按钮,点击后可以加快内存回收速度。微信小游戏内存优化,ios,微信,性能优化,cocoa,macos

  2. 再次点击左上角的红色小圆圈按钮结束录制,这时候我们可以选中蓝色区域,然后会显示该内存块包含的对象,这些是在内存中未被释放的资源,选中某个对象后,可以在 Retainers 界面看到对象的内存引用关系。到这里你可以根据代码层的逻辑关系来推理内存对象是否应该被释放,从而确认是否内存泄露。微信小游戏内存优化,ios,微信,性能优化,cocoa,macos

内存优化技巧

常见微信小游戏项目的内存由下面几个部分组成:

  1. 小游戏基础库

  2. 引擎脚本内存

  3. 业务脚本内存

  4. 音频内存

  5. 字体内存

  6. 图片内存

  7. Canvas 内存

知道了内存组成部分后,我们就可以针对不同的部分做一些优化。

以 iOS 高性能模式为例,常用的内存优化技巧如下:

  1. 小游戏通常基础库的内存 ~= 70M,常驻内存,不可优化。

  2. 引擎内存占用加载是确定的,由于引擎加载会初始化渲染器,所以通常主 Canvas 内存占用也在这个时候确定,这块内存占用可以通过配置渲染分辨率的倍数来优化。运行时根据引擎模块需要,会动态增加一些缓存内存,开发者可以根据功能需要通过编辑器项目设置里面的功能裁剪来减少引擎内存占用。

  3. 脚本内存包含引擎和业务代码、配置表数据, 根据游戏的开发体量,业务代码和配置表数据内存会有几百M的大小,只能用户自己做优化。

  4. 单个双通道的音频实例可能在 20M 左右,音频播放完后做释放会减少这块内存损耗,也可以精简成单通道音频减少内存。

  5. 在国内,一般使用的是中文字体,加载后内存占用至少大于 10M,所以尽量使用系统字,使用应用内部的共享资源。如果开发条件允许的情况下,可以使用 Bitmap 字体和 SDF 字体渲染。

  6. 图片内存是常用资源,根据加载需要,可以选择填充纹理后释放,或者缓存于内存中以便下次重新填充纹理。在iOS端上建议使用 astc 压缩纹理格式,同时禁用动态合批,这样可以释放 image 资源内存。压缩纹理本身也比 png 的内存占用小超过50%,但是 astc 的文件大小会比 png 大,所以会增加包体大小。通常为了减少首包大小,尽量将图片资源放到小游戏分包或者远程分包。

  7. TTF 字体文本渲染时会创建 Canvas 对象,Canvas 对象使用完会被回收到缓存池中,文本渲染的字号越多, 缓存池就越大,目前引擎没有提供回收机制,必要时可以修改引擎来释放 Canvas 缓存池。如果游戏运行内存占用比较高,可以使用 Bitmap 字体替代 TTF 字体。

  8. 还有其他的 JS 内存对象,比如 JSON 文件的释放,根据引擎提供的能力按需释放。

本文由 Cocos 引擎官方技术支持团队 提供,已同步到引擎官方开源仓库中:微信小游戏内存优化指南(IOS 端),欢迎大家 Star、Fork。文章来源地址https://www.toymoban.com/news/detail-715900.html


参考文章

到了这里,关于Cocos 微信小游戏内存与性能优化指南(iOS端)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 吐槽laya:H5小游戏开发应该用什么引擎好?laya、cocos还是unity?

    我看有人推荐laya,放在H5小游戏的前三排名,这压根不靠谱。 laya只能算个半成品,整体非常垃圾,如果是首次选择游戏引擎,至少转去cocos,实在选laya,那也没办法了。 下面说说laya有什么问题,如果只是一些简单的bug什么的,我是不会花这个时间吐槽的,但是如下的问题实

    2024年02月13日
    浏览(62)
  • Cocos Creator小游戏-文字斗争(H5、小程序)益智类 项目展示+完整项目源码

    文字斗争(H5、小程序)益智类 项目展示+完整项目源码 玩家有着自己的战场,可以作为进攻方去挑战其他战场,也可以作为防守方抵御其他玩家的进攻。 玩家可以挑战游戏里设置的各个关卡,提高自己的指挥能力和布局能力,最终可以战胜其他玩家的同时能够不被其他玩家

    2024年02月08日
    浏览(71)
  • Cocos Creator小游戏-2048(PC、安卓、H5)益智类 项目展示+完整项目源码

    Cocos Creator小游戏-2048 在棋盘上,每次会增加一个 小 动物,你可以选择四个方向 滑动 ,然后 小 动物会按方向移动,遇到相同的 小 动物就会 合并,看谁合并的最多。 1 .初始化格子小动物的位置。 2.手势滑屏移动屏幕中的小动物。 3.自动寻找棋盘中没有小动物的格子,自动

    2024年02月12日
    浏览(59)
  • cocos creator上架字节跳动(抖音)小游戏注意事项(匿名登录、录屏、分享等踩坑记录)

    常见拒绝原因1:小游戏无录屏功能,不符合平台要求 2:小游戏录屏时间小于3S,分享按钮点击无反应或提示错误文案,不符合平台要求 3:小游戏录屏时间大于300S,分享按钮点击无反应或无法正常分享录屏,不符合平台要求 不久前写了款小游戏,最近上架了字节跳动小游戏平

    2024年01月16日
    浏览(50)
  • cocos creator对接字节跳动(抖音)小游戏激励视频广告注意事项(审核不通过,次数不一致和重复获得奖励等)

    首先是官方文档里的对接方式:(https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-interface/ads/rewarded-video/tt-createRewardedVideoAd) 在cocos creator开发的小游戏中,把onLoad换成start就差不多了,场景初始化的时候把视频对象初始化好,事件绑定好,如果是单场景的游戏确

    2024年02月16日
    浏览(52)
  • 【Java编程指南】猜数字小游戏

    目录 一、前言 二、Random类 1.导包 2.创建对象 3.生成随机数 4.更改范围 5.演示 三、猜数字 1.需求 2.生成随机数范围 3.不限次数 4.规定次数 学习概述 :Java编程指南第6天、第7天我们学习了分支、循环结构,今天我们利用前面学过的知识点,加上一个 Random 类,动手完成一个 猜

    2023年04月08日
    浏览(46)
  • 微信3D小游戏系列一:在微信小游戏中使用threejs

    下载地址: https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 微信小程序/小游戏的开发需要在专门的开发者工具中,可下载最近更新的稳定版,若之前没有使用过微信开发的话,进入 小游戏开发指南填写和提交相关的注册信息。 如图新建一个空目录,选择该目录建立自

    2024年02月04日
    浏览(51)
  • 你的第一个微信小游戏,教你从0开始制作小游戏(一)

    微信开放文档 Cocos引擎_游戏开发引擎 发布流程就是先在cocos中编写你的游戏,然后生成对应的软件包,再到微信开发者工具上传到微信小程序平台。 Cocos是典型的组件节点式的开发,3.x版本之前的语言是js,ts都可以。3.x版本之后就只能用ts。 Introduction · Cocos Creator使用手册

    2024年02月12日
    浏览(61)
  • CocosCreator 微信小游戏

    问题描述: 用 cocoscreator 写的小游戏,想发布为微信小游戏,如何构建发布? 链接: https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html 依据自己的电脑配置,下载相应的文件哦。 打开 -微信开发者工具- ,用微信登陆,点击小游戏 ,点击 加号添加游戏 在 注册 -微信开发者

    2024年02月07日
    浏览(41)
  • Unity - 微信小游戏

    总参考:Unity WebGL 微信小游戏适配方案(公测)   下载 Unity插件,并导入至游戏项目中,版本更新请查看更新日志 请查阅推荐引擎版本,安装时选择 WebGL 组件 最终选择 Unity2021.2.5f1c1 InstantGame 前往Node官网安装长期稳定版 之前已安装 v16.17.0 前往微信开发者工具下载安装 Stable

    2024年02月06日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包