You have to believe in yourself. That’s the secret of success. —卓别林
好久没有更新博客了,自己转作直播类应用已经一年多。接触了一些应用开发的框架技巧,不记录,久了就容易忘记,现在重新开始更新博客。
最近发现我们直播应用在进入直播间时,能感受到明显的卡顿。本篇博文记录优化该问题的过程。
优化前
systrace作为分析卡顿问题的利器,本篇记录的优化方法,正是借助它实现的,优化前的systrace如下图。
透过systrace 标1的地方可以看到启动直播间的观看页面耗时近乎1s钟,难怪用户会感受到卡顿。标2跟标3的地方都是耗时的大户,放大systrace文件分别进行排查。
帧动画资源过大

透过放大后的标2处,发现一个combo_anim.xml 资源文件竟然耗时60ms,打开该文件如下:

这个帧动画是为了播放直播间小礼物而存在的,由于是通过数十张图片组合而成的,难怪加载耗时那么久,在接着排查,发现了好几处类似的资源,这些都是需要优化的地方。礼物相关的资源文件在刚进入直播间是没有必要加载的,因此这里通过ViewStub控件让礼物相关的布局实现惰性加载。
加载了不必要的webview
在接着看标3的地方

这里WebViewChromium初始化占据了大部分时间,WebView是为了加载游戏直播房间内的网页游戏而生的,进入直播间加载也不需要,可以通过判断是否是游戏房间在决定是否初始化webview来进行优化。
按需加载语音业务模块
再继续看有一块audiolive相关的view也在进入房间时被初始化了。

通过判断是否是语言房间来决定是否加载该块view。
优化后效果
最后看下优化后的效果,从900ms优化到了300ms。

在优化的过程中,透过systrace文件还是比较容易发现卡顿的症结在哪,但在修改的过程中,要注意可能导致的风险。任何修改旧业务的代码都可能会导致新的问题,如果引起了新的问题,那优化工作就得不偿失了。

博主转做直播类应用一年多,发现直播应用进入直播间有明显卡顿,借助systrace分析,发现帧动画资源过大、加载不必要的webview、提前加载语音业务模块等问题。通过惰性加载礼物布局、按需初始化webview和语音业务模块,将进入直播间耗时从900ms优化到300ms,同时提醒修改代码要注意风险。

2439

被折叠的 条评论
为什么被折叠?



