阅读 369

iOS-SVGA动画渲染之内存优化

自从直播和小视频兴起之后,礼物和打赏成为主播和平台盈利的有效手段。在各种特效中,SVGA(SVGA 是一种同时兼容 iOS / Android / Flutter / Web 多个平台的动画格式)动画基本上是现在各个平台选择的主流手段.

我之前的直播项目的礼物特效,都是采用官方SVGAPlayer加载SVGA资源,因为之前的业务相对简单,礼物资源也不庞大,更换工作之后发现新项目直播业务复杂,大量使用特效和全屏动画,在部分性能不好的机型上出现卡顿等情况。进过分析发现多个用户同时发送多个礼物,另外发送表情特效,多个SVGAPlayer同时工作,内存会飙升,另外某些SVGA资源十分庞大,也会出现内存飙升的情况。

先后采取了队列播放SVGA资源,SVGAPlayer复用,SVGA资源瘦身等措施都无法彻底解决问题,调研发现采用web加载SVGA资源可以优化内存消耗,但是要注意界面的适配问题。

加载SVGA资源前的内存使用情况:

使用SVGAPlayer加载资源的内存使用情况:

使用WKWebView加载资源的内存使用情况:

可见,使用WKWebView加载SVGA资源的内存增加不大,而使用SVGAPlayer加载SVGA资源的内存增加很明显。