深入理解Unity WebGL内存

更新时间:2015-09-09 20:31:20点击:31 行业观点

自Unity支持WebGL以来,我们开发团队就一直致力于优化WebGL的内存消耗。在Unity文件上已有对于WebGL内存管理的详尽分析,在Unite Europe 2015与Unite Boston 2015两届大会上,也有专题针对WebGL进行深入的讲解。然而开发者仍然对这方面的内容依旧讨论热烈,所以我们意识到应该分享更多关于这方面的内容。


Unity WebGL和其它发布平台有何不同?


如果开发者从一些本来就要控制内存的平台像是PC或是WebPlayer转过来的话或许已经有个基础,应该都不会造成问题。


如果目标是游戏机(Console)的话,内存管理相对比其他平台容易,因为可以准确知道内存是如何运用的。你可以很好的管理内存确保游戏完美运作。手机平台内存管理就有些复杂,因为设备种类繁多,但至少可以选择最低标准的设备,并根据市场情况略过那些标准更低的设备。


网页就没那么轻松了,理想状况下所有玩家(Client)都有64位浏览器和海量存储器,但事实总是残酷的。首先你无法知道它们计算机的硬件规格。然后除了他们的操作系统和浏览器之外,并无法取得其它信息。最后玩家可能像执行其它网页一样的方法开启你的WebGL内容。因此这是一个非常复杂的问题。


总览

这张图描述的是当Unity WebGL在浏览器执行的内存配置



这张图显示在Unity Heap区域上,Unity WebGL的内容会需要分配额外的内存,这里需要理解清楚才能进一步优化来降低玩家流失率。


从图里能看到有几个内存分配,DOM, Unity Heap, Asset Data以及程序代码,程序代码一旦加载网页就会永远存在内存里,其他像是Asset Bundles, WebAudio, Memory File System将会依据内容不同来分配(Asset Bundle下载大小不同,音乐的播放不同等等)


在载入的时候,asm.js解析和编译期间也有几个浏览器内存临时分配,这里有时候会导致32位浏览器出现内存不足。


声明:本文非原作,阅读全文请浏览http://gad.qq.com/program/translateview/7181010/
感谢原作者