腾讯 QQ 近期对桌面客户端进行了大刀阔斧的改革,三大系统平台都用上了全新 QQ NT 架构,基于 Electron 框架开发,因此也引来了用户关于“高内存占用、超大安装包、启动缓慢”等的担忧。
日前,QQ 技术团队在 InfoQ 平台发布了一篇介绍文章,分享了其在内存上进行专项优化的阶段性进展。
据介绍,新版 QQ 在内存上的挑战主要表现在以下 4 个方面:
产品形态:由 1 个复杂的大面板(100+ 复杂程度不等的模块)和一系列独立功能窗口构成。窗口与渲染进程一一对应,窗口进程数很大程度影响 Electron 的内存占用。对于那个复杂的大面板,一旦没有精细控制就很容易导致内存持续走高。
▲ Electron 窗口多进程,图源 InfoQ
使用习惯:用户长时间挂机。相比用完即走的 Web 页面,QQ 用户在一次登录后,可能会挂机一个月以上。这段期间,如果没有控制好 QQ 内存使用,那么结果可能是内存越占越大、用户交互响应变慢、甚至发生闪退。
版本迭代:已经 24 岁的 QQ 拥有众多的功能和特性,过去一年团队一直做这件事:从核心特性开始快速补齐 Windows 版本的功能,同时也有一些高优先级的新功能要上。持续且快速的版本迭代,很可能产生新问题,使性能劣化。
应用架构:新版 QQ 依赖一个 NT 核心数据模块(C++ addon),为 UI 提供本地化的数据服务。QQ 的加载体验能做到如此丝滑,这个模块起到了至关重要的作用。同时,与 NT 的联动优化,也需要拉通客户端 C++ 开发同学共同完成,当然,会存在一些沟通成本,但不可否认,能把内存占用压下来,客户端同学也付出了非常多的努力。
▲ 桌面端 QQ 整体架构,图源 InfoQ
对此,QQ 技术团队的工作主要包括以下几个方面:
工具分析:首先,团队需要使用不同维度的内存分析工具,从 V8 引擎到进程,再到整个应用程序,打通整个链路进行多角度的细节分析,以此来定位内存使用的瓶颈。
定向优化:在通过工具定位到问题之后,团队会采取一系列的针对性优化策略,包括缓存策略、按需加载、优雅降级等。
线上监控:在本地或小范围内验证通过之后,团队需要广大用户的验证来确认优化措施是否适用于所有场景。然而,如何获取用户在 Windows 任务管理器中看到的内存使用量是一个挑战,团队已经做了大量的研究和验证。
防止性能退化和自动化测试:为了保护辛苦得来的优化成果,并避免频繁的版本迭代影响 QQ 的内存目标,团队会借助开发框架、工具建设、代码审查等手段来预防性能退化。
QQ 技术团队表示,从结果或者解决问题的角度来看,经过一系列优化之后基本可以将 QQ 核心聊天场景的内存控制在 300M 以内,150M 的安装包大小,与旧版纯 Native QQ 差别较小。不单单内存占用,其他核心体验,比如切 AIO 的流畅度上要优于旧版 QQ。
据悉此前报道,腾讯已推出了 Windows QQ 9.9.1 以及 Mac QQ 6.9.18 版本更新,带来了多项优化和改进,后续预计还会有更多性能提升。