抖音开放平台Logo
开发者文档
控制台

Wasm分包工具说明

收藏
我的收藏
文档说明:本文档描述 Unity WebGL方案下,对代码进行分包优化的工具使用方法。
了解更多: 接入指南Webgl方案说明

背景介绍

Unity编译出来的WebGL产物中,代码包文件是一个wasm文件。通常情况下,小游戏的 wasm大小在30M左右,经过Brotli压缩后为6M左右。Unity WebGL小游戏在启动时,需要先将代码包下载下来,再对wasm代码进行编译,通常会占用较高的内存以及较长的编译时间。
使用wasm分包工具,将原来的wasm代码包拆分为两个,一个用于启动加载,另一个可以延迟加载。使得小游戏可以先加载较小的首包进入主场景,再异步加载剩下的分包。
好处:
    1.首包变小,下载时间变短,编译时间变短,优化启动时间
    2.对于iOS来说,减少内存使用,以支持更多 iOS 低端机上运行
    3.减少编译时间,降低了游戏前期的发烫情况

工具介绍

开发者可以在测试阶段,通过真机运行预览,并尽量覆盖游戏内的场景,特别是启动后最先进入的场景和关卡(比如新手教学,游戏最初的关卡内容)来收集信息。
工具上会显示收集到的函数个数,这时候就可以点击分包,将收集到的函数加入首包。
收集的场景覆盖率越高,命中子包的时机就可以相应延后,使得首包可以满足大部分新玩家前几分钟的游戏进程。

工具入口

在抖音开发者工具(版本>=4.3.2)的上方工具栏:

使用流程

初始界面

当首次进行wasm分包时,或者选择的WebGL包文件中的wasm代码发生变化,则会打开工具界面如下:
打开该界面,表示当前AppId所选择的wasm文件没有分包记录,需要进行首次分包。
输入项:
    WebGL包:通过构建工具构建出来的WebGL产物,为一个名称为webgl_package-xxx.zip的压缩包文件。
    版本描述: 针对此次分包版本的描述
    增量分包:基于之前结果再次进行分包的能力,详情请见下方的增量分包说明部分

主要流程

    1.启动代码分包
在初始界面上有一个【启用代码分包】按钮,点击该按钮,会将WebGL构建产物上传到服务器端,服务器端会对Wasm文件进行预处理:
请注意,这个【启用代码分包】并不是做wasm分包,只是为wasm分包前函数收集做准备,你需要收集一些函数后,再点击后续步骤中的【收集完成,开始分包】,才是真正的wasm分包。
    a.上传分包以及预处理:
此步耗时将需要数分钟,一般为3-5分钟,如果超过10分钟处于此状态,请重启开发者工具。
    b.预处理完成
服务端预处理完成代码之后,将跳转到以下界面。
界面将包含以下信息:
    【WebGL包】:此次分包所选中的文件,也可在此时切换其他WebGL包,来开启一个新的分包。
    【函数收集信息】:
    新增函数个数:表示当前正在运行过程中,所收集到函数个数。这个数值会在游戏运行过程中变化,当这个数值长时间未发生变化并大于0时,可以认为函数收集完成,可以点击【收集完成,开始分包】进行Wasm分包
    当前首包函数个数:已经分好的Wasm首包中的函数个数。
    总函数个数:原始Wasm文件中的函数总个数。
    【加载预览,开始收集函数】:点击此按钮将在页面上显示一个预览二维码,可通过真机扫描预览,进行函数收集。
    2.预览收集
点击【加载预览,开始收集函数】,将会自动执行预览操作,预览成功后显示二维码
    a.显示预览二维码
此时可使用手机扫码预览运行游戏,在运行期间将会观察到新增函数个数增加。
    b.扫码收集
    使用Android/iOS手机扫码预览进行函数收集,请尽可能的覆盖新手教学以及最初的关卡内容,防止玩家进入游戏,在启动游戏过程中便触发了子包函数加载,而产生负向的效果。
    尽量在真机上覆盖更多的场景,尽量将子包的加载延后,将很大程度提升游戏体验。
    收集到函数,新增函数数值有变化
    收集完成,开始分包】:当认为Wasm函数收集完成,即可以点击该按钮向服务器端请求Wasm分包。
    3.分包
    点击【收集完成,开始分包】,服务器将对代码进行处理,将wasm代码分为首包和子包,分包过程中将经历以下状态
    a.分包中
此过程耗时较长,一般为7-8分钟,(有可能需要等待超过10分钟),如果长时间处于此状态,请重启开发者工具。
    b.分包完成
当前首包函数个数将变化,同时出现下载分包文件按钮,点击【下载分包文件】按钮,将会获得完整的可用于发布的文件。
    c.下载后得到的文件
此文件名称将类似于webgl-split-xxxx.zip。此文件可用于最终测试版本的发布
另外开发者可以通过再次点击【加载分包预览,开始收集函数】,继续收集函数,此操作可重复进行,直到新增函数不再增加,即可认为分包已经完成,点击开始分包之后,再下载分包文件用于后续的发布即可。

其他功能

    【获取首包函数以及新增函数】:当收集到新增函数或者首包函数大于0时,点击此按钮将会向服务端获取函数信息,获取完成后,函数信息将在开发者工具的编辑区显示。仅支持获取最新一次分包的首包函数以及新增函数。
    【终止分包】:此次分包不想再进行下去,点击此按钮将回到初始状态,已收集的函数信息,也会被置为空,使用时请注意。

增量分包说明

增量分包功能,可以在前一次收集到的Wasm函数基础上进行Wasm分包。用户可以在此版本上基于之前的分包结果,只需运行新增游戏内容即可。(增量分包仅支持在准备分包状态下进行选择。)
点击增量分包下拉列表可以显示分包历史列表,列表中会显示收集到的函数数量,版本号,分包时间信息。
点击某个历史记录
启用代码分包后
无需进行收集,就会在新增函数信息上立即显示新增函数个数。预览游戏后,运行此前未运行的游戏内容即可,继续收集函数,直到新增函数数量不再增加,即可认为收集完成,其主要流程和前面的分包流程都将保持一致。

注意事项

    1.wasm分包可能无法将所有需要用到的函数收集全
    2.尽可能不要在游戏启动时,便触发了子包加载,会导致启动耗时增加,因此尽量覆盖新手场景,游戏启动阶段的内容。
当有一个函数未收集到,用到时都将会触发子包编译。如果是刚进入游戏时就触发了子包编译,子包编译时间可能会较长。原因是刚进入游戏时会存在JIT,使得wasm编译较慢。
    3. 建议多次重复运行游戏,使用Android/iOS同时测试,并使用多个设备收集。

常见问题

    1.分包后,进入游戏出现卡顿现象。
    a.主要原因是在加载子包时,是同步加载方式,在表现上会有卡顿,因此建议尽量多收集函数,可保证大部分场景不会出现卡顿。
    2.是否支持线上版本收集函数信息
    a.暂时还不支持
    3.iOS扫码预览时,游戏无法进入
    a.建议先使用Android手机进行收集,当收集足够多的函数之后,分包之后再进行预览,此时再使用iOS收集,将很大程度降低iOS无法进入的概率。