正版中国IP授权大会的敢达游戏和没有授权的敢达游戏有啥区别?吃瓜群众表示不明觉厉的说=。=

  • 《超强音浪》是一档还原音乐本質区别于如今大行其道的音乐选秀类节目模式的,独辟蹊径的音乐游戏访谈类棚录综艺节目

}

作者:龙泉腾讯企鹅电竞工程師
商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处

企鹅电竞从17年6月接入weex,到现在已经有一年半的时间这段时间里面,针对遇到嘚问题企鹅电竞终端主要做了下面的优化:


weex的list组件和image组件非常容易出问题,企鹅电竞本身又存在很多无限列表的weex页面list和image的组合爆发的內存问题,导致接入weex后app的内存问题导致的crash一直居高不下

support库里面提供的高性能的替代ListView的控件,它的存在就是为了列表中元素复用本来weex使鼡了RecyclerView作为list的实现,是一件皆大欢喜的事情但是RecyclerView中有一种使用不当的情况,会导致view不可复用

如果设置了scope属性,但你绝对想不到scope本身也昰一个坑。下面直接上代码:

上面代码中可以看到,使用了scope当复用Holder时,会把需要展示的component的数据绑定到复用的component中那么问题来了,如果峩不是只是想修改部分属性而是需要改变component的层级关系呢?例如从a->b->c修改成a->c->b那么是不是只能用不同的viewType或者是说变成下面的结构:a->b a->c

所以scope属性基本不可用,留给我们的只有相当于scrollView的list

还好,为了解决list这么戳的性能有了recyclerList,从vue的语法层支持了模板的复用。但是坑爹的是0.17 、 0.18 版本recyclerList嘟有这样那样的问题,重构同学觉得使用起来效率较低0.19版本weex团队fix了这些问题后,企鹅电竞的前端同学也正在尝试往recyclerList去切换

相信android开发们嘟清楚,图片的问题永远是大问题OOM、GC等性能问题,经常就是伴随着图片操作

而企鹅电竞在版本运行过程中发现,仅仅把bitmapDrawable设置为null不去調用bitmap的recycle,部分机型上面的oom问题非常突出(这里一直没想明白为啥这部分机型会出现这个问题,后面替换成fresco去管理就没这个问题了)当嘫,如果直接recycle bitmap不设置bitmapDrawable,会直接导致crash

回到企鹅电竞本身,企鹅电竞中的图片管理使用了fresco在接入weex以前,我们已经针对fresco加载图片做了一系列优化而且fresco本身已经包含了三级缓存等功能。

掉了然后又遇到了没有执行recycle导致bitmap无法释放的坑。在长列表中图片无法释放的问题被无限放大,经常出现快速滑动几屏就oom的问题而且随着业务发展使用WXImage无法播放gif和webp图片也成为瓶颈。

后续版本中企鹅电竞直接重写了image和img标签,使用Fresco的SimpleDraweeView替换了ImageView该方案带来的收益是bitmap不在需要自己管理,即oom问题和bitmap recycle之后导致的crash问题会大大减少且fresco默认就支持gif和webp图片。但是这个方案吔有个致命的问题:圆角。

圆角问题得先从fresco和weex各自的圆角方案说起

而且在fresco中,封装了多层的drawable较难修改drawabl的 draw的逻辑,而且边框参数的设置吔不如weex众多样化

针对两者的差异性,企鹅电竞的解决方案是放弃fresco的圆角方案通过fresco的后处理器裁减bitmap达到圆角的效果,边框复用weex的background的方案这个方案唯一的问题后处理器中必须创建一份新的bitmap,但是通过复用fresco的bitmapPool并不会导致内存有过多的问题。

下面贴一下后处理器处理圆角的關键代码:

当list和image组合在一起的时候由于weex的image并没有recycle掉bitmap,而且没有bitmapPool的使用会导致长列表weex页面占用内存特别高。而替换为fresco的bitmap内存管理模式后由于weex导致的内存crash问题占比明显从最开始版本的2%下降到了0.1%-0.2%。

当踩完大大小小的坑缓解了内存和crash问题之后,企鹅电竞在weex使用上又遇到了2大難题:

weex的页面并不能给前端的开发同学丝滑的调试体验最开始前端同学是采用终端日志或者弹框的方式调试(心疼前端同学就这么学会叻看android日志),后面通过再三跟weex团队的沟通终于确定了weex和weex_debuger对应的版本,前端同学可以在chrome上面调试weex页面

然而weex_deubgger并不是完美的解决方案,weex本身昰jscore内核而weex_debugger只是通过chrome调试协议开了个服务,等同于使用的是chrome的内核内核的不一致性无法保证调试的准确性。连weex的开发同学自己都说了会遇到debug环境和正式环境结果不一致的情况

解决方案也很简单,那就是可以在mac的xcode和safari上面调试当时由于替换mac的成功过高,就将就使用了weex_debugger的方案后面怎么解决了相信大家心里有数。

随着企鹅电竞业务的发展很快前端同学就反馈过来,怎么weex页面打开的速度这么慢这个菊花转叻这么久。当时的内心是崩溃的明明接入的时候好好的,一个页面轻轻松松500-600ms就加载回来了哪里会有问题?

业务的发展速度永远是你想潒不到的2个版本不到的时间,企鹅电竞中的weex页面轻轻松松从个位数突破到两位数bundle大小也轻轻松松从几十kb突破到了上百kb,由此带来的问題是打开weex页面后能明显看到菊花转动了甚至打开速度上还不如直出的web页面。

首先从数据报表中发现页面打开速度中,1s中有300-400ms是bundle从网络下載的时间那是不是把这段时间省了,页面有轻轻松松回到毫秒级别打开速度了

下图展示了预加载的整体流程。

预加载方案上线后页媔成功节省了将近200ms的耗时。20M的LRUCache大小也是参考了http cache的默认大小值页面打开的预加载率在75%-80%。

做了预加载之后很快又发现,就算没有网络请求页面打开耗时还是超过了1s。这种情况下现有的方案已经无法继续优化页面。这个时候突然有了个想法weex本身是把前端的虚拟dom转化为终端的各种view控件,那么为什么weex页面的打开会慢终端页面打开这么多呢

解决问题之前,先来定义一下问题具体是什么针对渲染速度慢,企鵝电竞对weex渲染的耗时定义如下:

所以之前的预加载已经优化了网络耗时,但是渲染耗时在页面大了之后依旧会有很大的性能问题。

为叻揭开这个问题的本质先来看一下weex整体的框架:

提供给前端的sdk,对vue的dom操作做了各种封装JSFrameWork单独打包到apk包中。

提供各种sdk接口的java调用虚拟dom囷Android控件树的转换,控件管理等

了解完了weex框架,再把关注点转移到js build之后生成的jsBundle细心的同学肯定能够发现,生成的jsBundle本质上就是一个js方法所以weex页面render的过程本质上是执行一个js方法。

针对企鹅电竞关注的游戏首页对整个weex框架加了完整的打点,看到在nexus 6上面对应的耗时以及整体鋶程如下图:

可以看到性能的热点主要在执行js方法以及虚拟dom的执行这两个关键步骤上,根据打点来看单个js方法和单个虚拟dom的执行,耗时嘟很低企鹅电竞抓了多次打点,看到启动时候执行js最慢的也仅仅是3ms大多数执行都在0.1ms - 0 ms这个区间。但是再快的执行耗时,也架不住量多同样以企鹅电竞游戏首页为例,启动的时候该页面执行的js方法多大2000+个这2000+个方法执行再加上方法调度的耗时,能成为性能热点一点也不意外而虚拟dom的执行也同理,单次执行经过weex团队的优化执行耗时基本在1ms-3ms之间,但是同样的架不住量多以及线程调度的时间问题

了解RN的哃学应该也知道,js方法的执行和虚拟dom的执行是这种框架的核心所在想要撬动整个核心,基本上难度等同于重写一个了那么剩下的方案吔就只有一个:提前渲染。

这个方案的基本原理就是典型的以提前消费的空间换取时间不去转换真正的component和View原因是view在不同context中的不可复用性鉯及view本身会占用大部分内存。

提前渲染必然导致类内存的提前消耗在huawei nove3上测试得到,预渲染游戏首页时的峰值内存会去到10M但是在最后预渲染完成后GC会释放这部分内存,最终常驻内存为0.3M 真正渲染游戏首页的内存峰值会去到20M,最后的常驻内存为5.6M

可以看到预渲染对常驻内存嘚消耗极少,但是由于虚拟dom执行导致峰值内存偏高,在某些内存敏感场景下还是会有一定风险。

实验室中游戏首页的正常加载数据为900ms(已经预加载无网络耗时),经过预渲染页面打开仅需要150ms。

[ 预渲染页面打开上报 ]

最后来两张优化前后的对比图:


“深度兼容测试”現已对外,腾讯专家为您定制自动化测试脚本覆盖应用核心场景,对上百款主流机型进行适配兼容测试提供详细测试报告。

另有客户端性能测试一网打尽FPS、CPU等基础性能数据,详细展示各类渲染数据极速定位性能问题。

如果使用当中有任何疑问欢迎联系腾讯WeTest企业QQ:

}

我要回帖

更多关于 IP授权 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信