http://www.52im.net/thread-921-1-1.html
微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化
阅读(6298) | 评论(1)收藏2 淘帖1 赞
JackJiang Lv.9    8 个月前 | |只看大图

前言

一款产品能否与用户产生化学反应,客户端在这一过程中的性能作用最关键。启动时间太长、内存消耗太大、ANR 等等,都会直接影响用户对一款应用的判断和使用体验。

如微信 Slogan 说的那样:微信,是一个生活方式。所以,微信 App 本身就包含非常多且复杂度高的业务模块(如搜索、视频等),也接入了很多第三方的插件,这势必会拖慢应用的启动时间和响应速度,尤其是目前出现了“微信重度用户”这一现象,迫使微信追求更多的分析和优化措施。

在由听云联合极客邦科技 /InfoQ 共同主办的 APMCon 2017 会议上,我们邀请微信“小黑屋 11 人”之一的微信客户端开发团队负责人陈岳伟(Lylechen)来 APMCon 现场分享“微信重度⽤户体验的优化之道”。InfoQ 对陈岳伟进行了会前采访,简单了解了微信在客户端性能监控和优化做了哪些工作。

访谈嘉宾

陈岳伟(Lylechen):
- 微信客户端开发团队负责人,统筹微信在 iOS、Android、Mac 和 Windows 等平台的开发管理工作;
- 2010 年加入微信团队,从无到有构建出微信的第一个 iOS 版本,并持续不断进行架构优化和性能稳定性打磨;
- 近年来主要关注微信终端监控体系以及微信重度用户的性能提升和体验优化。

访谈内容

1请介绍一下,微信 iOS 客户端第一个版本开发花了多长时间,在性能上有哪些关注点?

陈岳伟:第一个 iOS 和 Android 微信版本均花了 2 个月左右的开发时间。初期阶段主要集中在功能开发上,对性能没有特别花太多时间关注,主要对于启动速度、消息收发等主场景做了压力测试。对于一个初创的产品,微信研发团队更看重版本的快速迭代,“先迭代再优化”是第一原则。(相关文章《开发往事:记录微信3.0版背后的故事(距微信1.0发布9个月时)》、《开发往事:深度讲述2010到2015,微信一路风雨的背后》)

2目前微信客户端有哪些维度的性能监控,侵入性如何,对性能有何影响?

陈岳伟:目前微信客户端的性能监控纬度,主要包含 Crash、卡顿、耗时、内存、SQLite、安装包大小、网络性能等。

微信研发团队所做的监控系统可以分为两类:一类是通用监控,一类是专项监控。

针对通用监控,团队搭建了一套基于简单数值上报的终端实时监控系统,可以覆盖几乎所有的监控纬度,最终呈现出来的是 PV、UV、耗时分布、错误统计等。比如准实时生成客户端启动次数、Crash 次数、网络调用次数等曲线,最少延迟可以做到 10 分钟以内。

通用监控主要用于快速发现问题,而其定位问题的能力相对较弱,于是构建了多个专项监控系统。举个例子,微信团队构建的卡顿监控系统,不仅可以监控客户端卡顿次数,还可以展示卡顿堆栈分类和排序,部分场景还可以做到精确标示函数调用的耗时分布。当然专项监控的上报延时更长,数据计算也比较复杂,目前能做到“小时~天”的级别,主要起分析定位的作用。

大部分监控以手动埋点、框架性自动埋点以及触发式上报为主,对性能影响很小。SQLite 和耗时监控,涉及较细力度的插桩,会有一定的性能损耗,前者主要用于开发和自动化测试阶段,后者对现网用户做了一定的采样。

相关文章请见《移动端IM实践:iOS版微信界面卡顿监测方案》、《移动端IM实践:Android版微信如何大幅提升交互性能(一)》、《移动端IM实践:Android版微信如何大幅提升交互性能(二)》。

3微信客户端在性能上有哪些优化点?

陈岳伟:针对微信客户端的性能优化,主要分为网络、UI、内存、存储等四大模块。

  • 网络方面:在 IPList 选择策略、复合连接、连接耗时和稳定性、收发包耗时和稳定性、协议包压缩精简等诸多方面均作了长期的优化措施;针对安卓的后台长连接这一项,研发团队就在心跳策略、Push 及时性等方面做了很多工作。(参照  Mars 开源项目了解更多)。
  • UI 方面:除了经典 TableView 和 ListView 优化外,团队在图片 / 视频编解码、Bitmap 磁盘映射、视频渲染 Open GL 等领域也花了不少功夫。
  • 内存方面:微信团队构建了实用的内存泄漏工具以及前台 OOM 检测工具,在开发过程中即可快速发现内存访问不当的代码实现;针对联系人、头像和图片等模块做了统一的资源池,制定了符合微信特点的缓存和淘汰策略。
  • 存储方面:团队研发了高易用接口的 WCDB 组件,统一了微信内的 DB 线程模型和事务机制;根据微信客户端的消息、联系人、朋友圈和收藏等模块做了针对性的 DB 分离和数据表拆分;通过修改 SQLite 源码,大幅度降低了 SQLITE_BUSY 的发生次数;通过配置 DB 文件和 WAL 文件的 mmap 模式,对 DB 的 IO 性能也有不少的提升。关于这方面的内容,欢迎大家参考 WCDB 开源项目。

4微信客户端目前开发了哪些跨端组件,是否均使用 C/C++ 开发?

陈岳伟:目前主要有两大跨平台组件,包括 Mars 组件(COMM、XLOG、SDT、STN,详见 Mars 介绍)和 WCDB 组件。其中 Mars 全部使用 C/C++ 开发,可适用于 iOS、Android、Windows 和 Mac 等平台;而 WCDB 主要根据 iOS(MacOS)和 Android 两个平台提供了不同的语言适配,但底层的 SQLite 源码优化和 RepairKit,还是继续采用 C/C++ 开发。

微信的移动端数据库组件WCDB和移动端IM网络层跨平台组件库Mars都已开源,开源代码和资料托管等详见《[资讯] 微信正式开源移动端数据库组件WCDB!》、《如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源》 。

5微信 iOS 端在 WebView 上做了哪些优化,有哪些性能监控点?

陈岳伟:iOS 端的 WebView 主要做了资源预加载与缓存、视频代理与下载策略优化、图片代理与编码优化等,针对 WebView 安全和微信特有的 JS SDK 也有一系列的优化策略。

目前微信绝大部分 WebView,均已替换为 WKWebView,在内存占用和稳定性上有很大的提升。性能监控点,主要包含各阶段耗时分布、相关错误码分类和内存 OOM 监控。

6针对重度用户的体验优化是从什么时候开始的?当时的出发点是什么?到目前主要做了哪些工作,有什么规划?

陈岳伟:从 2015 年底开始,当时出发点是 DB 损坏率极速上升,以及用户存储空间快速增长;目前主要对 DB 损坏、内存 OOM 和存储架构等做部分优化工作,前两者会在 APMCon 给大家做详细分享;后续希望对重度用户大盘进行更精确的监控和分析,提升问题发现和定位能力。(《微信团队原创分享:微信客户端SQLite数据库损坏修复实践》一文详细介绍了相关技术实践)

微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化相关推荐

  1. py获取前端的参数_鹅厂技术说 | 深入理解前端性能监控

    作者系 腾讯新闻前端团队 大鹏哥,本文已得到授权. 导语:在同样的网络环境下,有两个同样能满足你的需求的网站,一个唰的一下就加载出来了,另一个白屏转圈转了半天内容才出来,如果让你选择,你会用哪一个? ...

  2. 微信多媒体团队梁俊斌访谈:聊一聊我所了解的音视频技术

    本文内容由"微信多媒体团队"整理发布. 1.引言 广州TIT创意园,这里是腾讯在广州的研发团队所在地,LiveVideoStack采访了微信多媒体内核中心音视频算法高级工程师梁俊斌 ...

  3. 微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等

    内容概述 腾讯多媒体内核中心高级研究员时永方接受了LiveVideoStack的邮件采访,谈及了个人成长中的关键时刻,学习多媒体开发的三点核心,以及在5G和高清时代下,微信多媒体团队面临的挑战. Q: ...

  4. 技术团队负责人应该具备怎样的能力

    本文由码农网 – 马天宇原创 公司的技术团队负责人应该具备怎样的能力? 或者说团队Leader应该知晓和锻炼什么样的能力? 大公司.创业公司都经历过,从Leader或创始人那里学到了不少东西,自己也会 ...

  5. 公司的技术团队负责人(团队管理),研发团队

    很多软件公司,一方面不注重架构的设计与宣贯,导致变更的时候问题多多,程序员也不能很好领会架构意图,一方面忽视整个过程中对架构的管控,认为架构只是最初那张静态图. 公司的技术栈,了解公司的产品和代码架构 ...

  6. 技术领导之路:如何从开发人员转变为团队负责人

    如果软件开发只是你职业目标的一部分,那关于未来如何成为一名技术负责人也许是你应该认真思考和学习的事情.技术负责人可能意味着不同的事情:身兼团队负责人或技术经理的职责.譬如,研发项目经理是一个需要对其团 ...

  7. 走进阿里:现任阿里技术团队负责人,公开解密阿里新一代核心技术

    前面不久,在京举行的中国数据库技术大会上,来自阿里巴巴集团研究员张瑞发表了题为<面向未来的数据库体系架构的思考>的主题演讲. 主要介绍了阿里数据库技术团队正在建设阿里下一代数据库技术体系的 ...

  8. 知乎算法团队负责人孙付伟:Graph Embedding在知乎的应用实践

    演讲嘉宾 | 孙付伟 出品 | AI科技大本营(ID:rgznai100) 9月6-7日,在由CSDN主办的2019中国AI开发者大会(AI ProCon 2019)的 机器学习专场中,知乎算法团队负 ...

  9. “数据科学家”或许不再性感,但“数据团队”的产业化才刚开始 | 专访领英全球数据科学团队负责人...

    来源:大数据文摘 本文约5750字,建议阅读6分钟. 本文为清华大学大数据研究中心联合大数据文摘发起的年度白皮书<顶级数据团队建设全景报告>系列专访的第二篇内容.<报告>囊括专 ...

最新文章

  1. poj2449(k短路算法)
  2. python量化策略代码_手把手教你用三行python 代码做一个动量策略「量化投资系列」...
  3. WinAPI: GetSystemDirectory - 返回 System 文件夹路径
  4. FSG2.0脱壳记录
  5. mysql看表关联视图_MySQL数据库 : 自关联,视图,事物,索引
  6. 并发(concurrency)和并行(parallellism)
  7. c语言编写程序求8,使用c语言编写程式,实现计算1*2*3+4*5*6+7*8*9+……+28*29*30的值...
  8. [html] 请使用canvas画一个渐变的长方形
  9. C# 中的readonly属性
  10. EasyUI ComboBox应用示例
  11. supermap大赛用得到python吗_Esri杯GIS大赛和SuperMap杯GIS大赛如何选择?
  12. eclipse中Ctrl+Alt+↓向下复制快捷键与系统中翻转屏幕快捷键冲突问题(已解决)
  13. 开博尔android播放器,你看!你细看!开博尔Q50播放器本地和NAS文件管理方式详解...
  14. spring boot + netty实现匿名聊天室 web版
  15. python生成指定长度的列表_python怎样创建具有一定长度和初始值的列表
  16. Linux监控软件之 Nagios
  17. 苹果平板怎么卸载软件_苹果卸载软件功能
  18. 写GML到一个复杂的应用模式
  19. UART,SPI,IIC,RS232通信时序和规则
  20. ubuntu装机比做_与众不同总比做品牌设计案例研究更好

热门文章

  1. Latex设计表格字体大小
  2. 剪一段旧时光,暗香绽放
  3. DTAS 3D仿真计算结果解释
  4. 信捷XC PLC与3台施耐德ATV12变频器通讯程序 信捷XC PLC与3台施耐德ATV12变频器通讯
  5. 异常监测与应急恢复解决方案
  6. framework-admin-vue3 管理系统快速开发模板
  7. 学习机器视觉的参考顺序
  8. 吉他谱:Kiss the Rain - Sky Guitar Level 2
  9. Hyper-V The signed image’s hash is not allowed
  10. Openstack九大组件