【51CTO.com原创稿件】微信靠什么吸引了中国9亿用户?可能是它传递了一种新的生活方式,也可能是它的功能满足了人们日常社交的大部分需求,也可能是它承载了丰富的第三方插件,但是所有的吸引力都离不开一个重要的元素——客户端。因为客户端是用户接触微信的***步,是否有卡顿、是否占太多内存,有没有频繁闪退、启动时间久不久等等因素,都会影响微信的使用体验,也决定了用户是否会成为微信“死忠粉”。
那么,完善好了这一切,就足够了吗?当然不是。因为微信还有1%~2%的重度用户,他们的需求才是对微信优化团队的“极限挑战”。记者日前在由听云主办的2017中国应用性能管理大会现场,采访了微信客户端开发团队负责人陈岳伟,他与记者分享了“微信重度用户体验的优化之道”。
重度用户需求挑战优化极限
陈岳伟介绍到,重度用户是相对海量用户提出的概念,专指针对某个特别的个案用户。那么这些重度用户的微信使用和普通用户有何不同呢?陈岳伟告诉记者,这些重度用户的微信联系人名单里往往拥有10万+以上的联系人,基本每天在线时长超过3个小时,每天都会接收超过5万条消息。
从2016年年初开始,陆续有重度用户向微信团队反馈一个问题:在使用微信过程中,突然聊天记录和联系人都变成空白,即使使用微信修复工具也无法恢复,而这种问题的原因就在于用户的本地数据量过大,加之消息收发频繁,导致数据库损坏。
另外,闪退问题也曾经令微信优化团队非常头痛。有些用户反馈启动微信一两分钟后,微信就闪退了,聊天记录和聊天功能都不能使用,其实导致这个现象的直接原因就是内存占用过多。陈岳伟表示,过去最初的微信用户好友数量均不多,所以微信团队技术方案设计比较简单,将所有联系人都缓存在内存里,就这导致联系人数量超过10万以上的重度用户被占用太多内存,影响微信正常使用。
除此之外,微信重度用户由于临时会话太多,手机本地存储消息量过大,也会导致微信卡顿或闪退。
为了让那万分之三的人点赞
记者了解到,以闪退问题为例,此类重度用户的日活跃数量大概在5 万名左右,只占微信总用户数的万分之三左右,那么如此低的占比,为什么还要花大精力去优化呢?在记者看来这完全是得不偿失的事情。
陈岳伟解释道,重度用户的数量并不是判断是否值得优化的唯一标准,对微信优化团队而言,他们有自己的评判标准,例如用户可不可以很好地使用微信,是不是每天都会遇到同样的问题,如果微信在这类人群处于完全不可用状态,并且这些问题一直在持续增长,那么坏的影响力有可能不断扩大,那就必须去着手解决。
爆内存是如何解决的?
解决应用问题的常用思路是:发现问题、分析问题、设计方案、解决问题、灰度测试、上线、效果验证。陈岳伟所带领的微信优化团队也不例外,他以解决内存占有率太高这个问题为例,详细介绍了他们是如何操作的。
通过用户反馈这个渠道,他们发现微信存在闪退的现象。优化团队发现,这种闪退现象并没有Crash上报,于是他们将这种闪退现象定性为爆内存。为什么会有爆内存?优化团队再进一步研究发现,大多数反馈用户都是在联系人加载完成的那一步突然出现闪退现象,这些用户的联系人往往超过了10万名,并且加入一两百个大群。
那么该如何解决它?首先需要进行情景还原,也就是把整条链路还原回来,重新构建用户问题发生的场景,然后解决问题。“假设不去重现这些场景的话,你会发现很多问题都是打着补丁的,解决得并不彻底。”
情景还原之后,优化团队发现,微信缓存内存高达112M,远远高于大多数用户几M的大小。其根源就在于用户的联系人过多,而每一个联系人的类结构有90个属性,每个联系人占用1K内存,所以就很容易达到了112M的内存。
问题分析清楚之后,方案设计的实现就变得非常简单,无非就两种方案:一是将联系人的属性降低到更小,这样存储就可以更小,二是采取比较直观的解决方法——按需加载。最终微信优化团队设置了15000名联系人限制,微信允许这15000人一直在内存中存在,其中就包含所有好友,而对于群聊陌生人则通过按需加载,并给予额外10000的缓存上限。“实际应用后,我们发现,90%的用户都不会达到这个上限。”陈岳伟透露,他们做优化有一个原则,首要保障性能的损耗最小,影响的用户最少。
最终,优化团队***地解决了爆内存的问题,平均可以降低用户92%的内存占比。
比解决问题更难的是准确分析问题
“问题的关键在于如何发现问题,分析问题,这个过程非常复杂,如果你的分析有理有据,可以找到问题根源所在,那么解决问题就变得比较简单了。”陈岳伟还分享道,解决问题的时候尽量要做到区别对待,对正常用户还是保持它原有的逻辑,而对重度用户可以调整部分处理方式,这样就可以保证应用的影响范围降到***,也可以让应用的常规用户得到完全无损的体验。
在解决重度用户的过程中,微信优化团队也总结了一些经验做法。
首先是要保证一切可量化。一切可量化需要做到哪种程度?在解决问题的过程中,他们发现需要有数据来做支撑,这不仅仅在影响范围评估时可以量化,其实在问题分析、问题影响范围评估、上线效果验证等方面都需要有量化的指标。假设没有任何的精确数据告诉开发团队解决问题的详细相关数据,那就没有办法真正有效地去解决问题。
其次是灰度上线。陈岳伟透露,Facebook做了很多复杂的AB Test系统,包含了性能、广告在内。微信也做了一个类似的AB Test,对用户联系人、账号、消息等核心模块进行改造时,均通过灰度方式,逐步放量实验新的解决方案,发现问题就重新修复,再次灰度放量,直到稳定性非常高的时候,再全量放开发布。
采访***陈岳伟告诉记者,他希望可以通过一些更好的措施把重度用户的事情做得更好。目前来看做得还比较初级,以后将通过一些探索,通过某一些场景的深刻研究,把重度用户优化这件事情当作一个长期的事情来看待,能够实现对重度用户全局进行更精确的监控和分析,提升问题发现和定位能力。
采访嘉宾:
陈岳伟(Lylechen),微信客户端开发团队负责人,统筹微信在 iOS、Android、Mac 和 Windows 等平台的开发管理工作。2010 年加入微信团队,从无到有构建出微信的***个 iOS 版本,并持续不断进行架构优化和性能稳定性打磨。近年来主要关注微信终端监控体系以及微信重度用户的性能提升和体验优化。
APMCon2017
APMCon是由听云、极客邦科技与InfoQ联合主办的全球高水准APM技术盛会,聚焦当前最为关键的移动端、Web端和Server端的性能监控和管理技术。整个会议包含智能运维、数据库性能优化、移动性能优化、前端性能优化、业务数据实时分析和可视化、微服务与容器与CDN加速等话题。
APMCon内容源于实践并面向社区,来自国内外的演讲嘉宾依据热点话题,面向5年以上的技术团队负责人、中高级开发和运维人员、工程总监分享APM技术创新、趋势和***实践。
【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】