微信客戶端團隊負責人技術訪談:如何著手客戶端效能監控和優化
http://www.52im.net/thread-921-1-1.html
微信客戶端團隊負責人技術訪談:如何著手客戶端效能監控和優化
前言一款產品能否與使用者產生化學反應,客戶端在這一過程中的效能作用最關鍵。啟動時間太長、記憶體消耗太大、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、記憶體、儲存等四大模組。
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資料庫損壞修復實踐》一文詳細介紹了相關技術實踐) |
相關文章
- 支付寶客戶端架構解析:iOS 客戶端啟動效能優化初探客戶端架構iOS優化
- IT 團隊文件工具 showdoc 推出 Windows 版客戶端Windows客戶端
- SpringCloud客戶端負載均衡——RibbonSpringGCCloud客戶端負載
- SpringCloud 客戶端負載均衡:RibbonSpringGCCloud客戶端負載
- mysqlslap 負載模擬客戶端MySql負載客戶端
- 微軟ToDo客戶端(macOS)微軟客戶端Mac
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端
- 支付寶客戶端架構解析:Android 客戶端啟動速度優化之「垃圾回收」客戶端架構Android優化
- 中小團隊的技術負責人如何做好技術團隊建設
- vue客戶端渲染首屏優化之道Vue客戶端優化
- Spring Cloud Ribbon 客戶端負載均衡SpringCloud客戶端負載
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- VNC客戶端是Windows,VNC客戶端是Windows如何進行操作VNC客戶端Windows
- 服務端,客戶端服務端客戶端
- 客戶端,服務端客戶端服務端
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 服務端渲染和客戶端渲染服務端客戶端
- 如何建立NEO輕客戶端客戶端
- 企業微信如何管理微信客戶
- JavaFX及Java客戶端技術的未來Java客戶端
- Linux部署rocketmq和視覺化客戶端LinuxMQ視覺化客戶端
- 中文版vnc客戶端,中文版vnc客戶端下載,中文版vnc客戶端如何使用?VNC客戶端
- 物理DataGuard客戶端無縫切換--客戶端TAF 配置客戶端
- [Redis 客戶端整合] Java 中常用Redis客戶端比較Redis客戶端Java
- 高效能 HTTP 客戶端 undici 初探HTTP客戶端
- 天美J3客戶端負責人:全球化研發浪潮中,我們如何做好準備?客戶端
- java websocket 客戶端JavaWeb客戶端
- redis客戶端管理Redis客戶端
- iscsi linux客戶端Linux客戶端
- Zookeeper 客戶端 API客戶端API
- 客戶端加解密客戶端解密
- Tower:GIt客戶端Git客戶端
- YouTube macYouTube客戶端Mac客戶端
- Redis-客戶端Redis客戶端
- 客戶端筆記客戶端筆記
- 手遊防破解防外掛技術方案(一)客戶端篇客戶端