本周工作思考
- iPhone6s语音微课卡顿问题排查
- 这个问题存在很长时间了,综合各种情况其优先级没有得到优先处理,随着web组的整体产能的扩充,现在可以把一些疑难问题花时间处理也跟进处理
- 本来计划这个排查需要一下午的时间,实际上断断续续用了近1天多的时间,排查的方法是还是通过打log的方式看是否有报错或者性能瓶颈,通过排查和排除发现,
- 只有iPhone 6s上的app录制的语音微课在iPhone 6s的app或者Safari上存在问题
- 在 Android app 或者 PC Chrome 上播放均无卡顿的情况发生
- 使用 Android app 或者 PC Chrome 录制的微课均无卡顿的情况
- iPhone 6s上使用的编解码器是LAME3.99,而Android app 或者 PC Chrome使用的是LAME3.100
- 单独播放iPhone 6s上录制的音频无卡顿的情况
- 通过性能日志发现,发生卡顿时video的onTimeUpdate的的事件执行事件过长,去掉onTimeUpdate的事件,则无或者轻微卡顿发生,确定是直接原因和onTimeUpdate有关,但是无法确定是否是因果关系
- onTimeUpdate事件中涉及到播放时间控制,slides更新,播放进度展示等业务逻辑
- 通过以上排查发现,卡顿和react setState性能有明显正相关,目前初步推测造成性能问题的原因是有2个,1是音频文件解码性能,2 khtml内核和react在渲染上性能损耗;目前暂未发现特别消耗性能的业务操作,因为通过日志发现,播放卡顿时,业务逻辑展示的性能消耗无明显规律,在统计各处都有发现较大的性能消耗,也都有无明显性能消耗的地方
- 目前还未想到特别有效可落地的办法,onTimeUpdate控制slides的更新,必须保证音画同步,所以不能使用异步的方式,但是mp3文件的解码比较费时间但是涉及浏览器内部,没法触及优化;目前在验证的方法是重新编码LAME3.99的mp3文件,周四在通过FFmpeg做转换试验,暂时没有较大的进展;
- 1