速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

微信客户端性能监控和优化简述

  • 2017-07-10
  • 本文字数:2304 字

    阅读完需:约 8 分钟

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

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

目前,已经有超过 9 亿用户在手机端使用微信,针对这样庞大的用户群,微信本着精益求精的态度和对用户体验的追求,在技术角度上最大程度的对性能进行优化。

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

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

陈岳伟:第一个 iOS 和 Android 微信版本均花了 2 个月左右的开发时间。初期阶段主要集中在功能开发上,对性能没有特别花太多时间关注,主要对于启动速度、消息收发等主场景做了压力测试。对于一个初创的产品,微信研发团队更看重版本的快速迭代,“先迭代再优化”是第一原则。

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

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

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

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

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

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

InfoQ:微信客户端在性能上有哪些优化点(如网络、协议、长列表、本地数据库)?

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

网络方面,在 IPList 选择策略、复合连接、连接耗时和稳定性、收发包耗时和稳定性、协议包压缩精简等诸多方面均作了长期的优化措施;针对安卓的后台长连接这一项,研发团队就在心跳策略、Push 及时性等方面做了很多工作。(参照 Mars 开源项目了解更多)

UI 方面,除了经典 TableView 和 ListView 优化外,团队在图片 / 视频编解码、Bitmap 磁盘映射、视频渲染 Open GL 等领域也花了不少功夫。

内存方面,微信团队构建了实用的内存泄漏工具以及前台 OOM 检测工具,在开发过程中即可快速发现内存访问不当的代码实现;针对联系人、头像和图片等模块做了统一的资源池,制定了符合微信特点的缓存和淘汰策略。

存储方面,团队研发了高易用接口的 WCDB 组件,统一了微信内的 DB 线程模型和事务机制;根据微信客户端的消息、联系人、朋友圈和收藏等模块做了针对性的 DB 分离和数据表拆分;通过修改 SQLite 源码,大幅度降低了 SQLITE_BUSY 的发生次数;通过配置 DB 文件和 WAL 文件的 mmap 模式,对 DB 的 IO 性能也有不少的提升。关于这方面的内容,欢迎大家参考 WCDB 开源项目

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

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

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

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

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

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

陈岳伟:从 2015 年底开始,当时触发点是 DB 损坏率极速上升,以及用户存储空间快速增长;目前主要对 DB 损坏、内存 OOM 和存储架构等做部分优化工作,前两者会在 APMCon 给大家做详细分享;后续希望对重度用户大盘进行更精确的监控和分析,提升问题发现和定位能力。

嘉宾介绍:

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

2017-07-10 04:455003
用户头像

发布了 181 篇内容, 共 94.8 次阅读, 收获喜欢 207 次。

关注

评论

发布
暂无评论
发现更多内容

澜舟科技成立两周年|“孟子GPT”大模型开启邀测

澜舟孟子开源社区

2023深圳高交会|第二十五届中国国际高新技术展览会

AIOTE智博会

高交会

直播预告 | 博睿学院:揭开docker的神秘面纱

博睿数据

Docker 可观测性 智能运维 博睿数据 博睿学院

钛媒体专访|对话澜舟科技周明:大模型炒作过热,创业公司要选好赛道

澜舟孟子开源社区

纯实战!教你2小时学会10个组件“取代”传统Java开发

SoFlu软件机器人

「大模型之家」对话澜舟科技创始人兼CEO周明:马上采取行动,拥抱大模型

澜舟孟子开源社区

架构经典设计思想之池化

三叶草

AIGC,你看我还有机会吗?| 融云前沿

融云 RongCloud

人工智能 产品 AI 互联网 AIGG

从零开始搭建医药领域知识图谱实现智能问答与分析服务(含码源):含Neo4j基于垂直网站数据的医药知识图谱构建、医药知识图谱的自动问答等

汀丶人工智能

人工智能 知识图谱 智能问答

压力测试核心性能指标及行业标准

优测云服务平台

压力测试 稳定性测试 并发测试 系统优化 #性能测试

非托管流动性协议Hover:或将引领Cosmos新一轮DeFi Summer

股市老人

Nautilus Chain:主权模块化区块链的早期实践

大瞿科技

如何判断某个视频是深度伪造的?

高端章鱼哥

人工智能 伪造视频 AI视频

Nautilus Chain:主权模块化区块链的早期实践

BlockChain先知

快速玩转 Llama2!阿里云机器学习 PAI 推出最佳实践(一)——低代码 Lora 微调及部署

阿里云大数据AI技术

软件测试/测试开发丨Python 继承 学习笔记

测试人

Python 程序员 软件测试 自动化测试

低代码治好了CIO们的 “精神内耗”

高端章鱼哥

软件开发 低代码 数字化 软件交付 降低成本

Flink 最佳实践:TDSQL Connector 的使用(上)

腾讯云大数据

flink 流计算 Oceanus

低代码是开发者的未来吗?浅谈低代码平台

互联网工科生

云原生 低代码 数字化 系统开发

点云标注在自动驾驶中的精度提升

来自四九城儿

基于 Databend 实现的海量日志实时查询服务 | 多点DMALL

Databend

6大产品20项亮点,支付宝小程序云全揭秘

TRaaS

小程序 支付宝小程序

网络安全(黑客)自学

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

金融领域:产业链知识图谱包括上市公司、行业和产品共3类实体,构建并形成了一个节点10w+,关系边16w的十万级别产业链图谱

汀丶人工智能

自然语言处理 知识图谱

大文件传输中的加密与安全措施

镭速

大文件传输

uni-app开发小程序:项目架构以及经验分享

陇锦

小程序 uni-app 前端

软件测试/测试开发丨Python 封装 学习笔记

测试人

Python 软件测试 自动化测试 封装

iOS MachineLearning 系列(22)——将其他三方模型转换成CoreML模型

珲少

WAIC2023精彩回顾|澜舟科技首次亮相WAIC,孟子大模型专注垂直领域专业赛道

澜舟孟子开源社区

微信客户端性能监控和优化简述_语言 & 开发_Xue Liang_InfoQ精选文章