你的微信有10萬+聯(lián)系人?重度用戶需求的極限挑戰(zhàn),微信接了!
原創(chuàng)【51CTO.com原創(chuàng)稿件】微信靠什么吸引了中國9億用戶?可能是它傳遞了一種新的生活方式,也可能是它的功能滿足了人們日常社交的大部分需求,也可能是它承載了豐富的第三方插件,但是所有的吸引力都離不開一個重要的元素——客戶端。因為客戶端是用戶接觸微信的***步,是否有卡頓、是否占太多內存,有沒有頻繁閃退、啟動時間久不久等等因素,都會影響微信的使用體驗,也決定了用戶是否會成為微信“死忠粉”。
那么,完善好了這一切,就足夠了嗎?當然不是。因為微信還有1%~2%的重度用戶,他們的需求才是對微信優(yōu)化團隊的“極限挑戰(zhàn)”。記者日前在由聽云主辦的2017中國應用性能管理大會現場,采訪了微信客戶端開發(fā)團隊負責人陳岳偉,他與記者分享了“微信重度用戶體驗的優(yōu)化之道”。
重度用戶需求挑戰(zhàn)優(yōu)化極限
陳岳偉介紹到,重度用戶是相對海量用戶提出的概念,專指針對某個特別的個案用戶。那么這些重度用戶的微信使用和普通用戶有何不同呢?陳岳偉告訴記者,這些重度用戶的微信聯(lián)系人名單里往往擁有10萬+以上的聯(lián)系人,基本每天在線時長超過3個小時,每天都會接收超過5萬條消息。
從2016年年初開始,陸續(xù)有重度用戶向微信團隊反饋一個問題:在使用微信過程中,突然聊天記錄和聯(lián)系人都變成空白,即使使用微信修復工具也無法恢復,而這種問題的原因就在于用戶的本地數據量過大,加之消息收發(fā)頻繁,導致數據庫損壞。
另外,閃退問題也曾經令微信優(yōu)化團隊非常頭痛。有些用戶反饋啟動微信一兩分鐘后,微信就閃退了,聊天記錄和聊天功能都不能使用,其實導致這個現象的直接原因就是內存占用過多。陳岳偉表示,過去最初的微信用戶好友數量均不多,所以微信團隊技術方案設計比較簡單,將所有聯(lián)系人都緩存在內存里,就這導致聯(lián)系人數量超過10萬以上的重度用戶被占用太多內存,影響微信正常使用。
除此之外,微信重度用戶由于臨時會話太多,手機本地存儲消息量過大,也會導致微信卡頓或閃退。
為了讓那萬分之三的人點贊
記者了解到,以閃退問題為例,此類重度用戶的日活躍數量大概在5 萬名左右,只占微信總用戶數的萬分之三左右,那么如此低的占比,為什么還要花大精力去優(yōu)化呢?在記者看來這完全是得不償失的事情。
陳岳偉解釋道,重度用戶的數量并不是判斷是否值得優(yōu)化的唯一標準,對微信優(yōu)化團隊而言,他們有自己的評判標準,例如用戶可不可以很好地使用微信,是不是每天都會遇到同樣的問題,如果微信在這類人群處于完全不可用狀態(tài),并且這些問題一直在持續(xù)增長,那么壞的影響力有可能不斷擴大,那就必須去著手解決。
爆內存是如何解決的?
解決應用問題的常用思路是:發(fā)現問題、分析問題、設計方案、解決問題、灰度測試、上線、效果驗證。陳岳偉所帶領的微信優(yōu)化團隊也不例外,他以解決內存占有率太高這個問題為例,詳細介紹了他們是如何操作的。
通過用戶反饋這個渠道,他們發(fā)現微信存在閃退的現象。優(yōu)化團隊發(fā)現,這種閃退現象并沒有Crash上報,于是他們將這種閃退現象定性為爆內存。為什么會有爆內存?優(yōu)化團隊再進一步研究發(fā)現,大多數反饋用戶都是在聯(lián)系人加載完成的那一步突然出現閃退現象,這些用戶的聯(lián)系人往往超過了10萬名,并且加入一兩百個大群。
那么該如何解決它?首先需要進行情景還原,也就是把整條鏈路還原回來,重新構建用戶問題發(fā)生的場景,然后解決問題。“假設不去重現這些場景的話,你會發(fā)現很多問題都是打著補丁的,解決得并不徹底。”
情景還原之后,優(yōu)化團隊發(fā)現,微信緩存內存高達112M,遠遠高于大多數用戶幾M的大小。其根源就在于用戶的聯(lián)系人過多,而每一個聯(lián)系人的類結構有90個屬性,每個聯(lián)系人占用1K內存,所以就很容易達到了112M的內存。
問題分析清楚之后,方案設計的實現就變得非常簡單,無非就兩種方案:一是將聯(lián)系人的屬性降低到更小,這樣存儲就可以更小,二是采取比較直觀的解決方法——按需加載。最終微信優(yōu)化團隊設置了15000名聯(lián)系人限制,微信允許這15000人一直在內存中存在,其中就包含所有好友,而對于群聊陌生人則通過按需加載,并給予額外10000的緩存上限。“實際應用后,我們發(fā)現,90%的用戶都不會達到這個上限。”陳岳偉透露,他們做優(yōu)化有一個原則,首要保障性能的損耗最小,影響的用戶最少。
最終,優(yōu)化團隊***地解決了爆內存的問題,平均可以降低用戶92%的內存占比。
比解決問題更難的是準確分析問題
“問題的關鍵在于如何發(fā)現問題,分析問題,這個過程非常復雜,如果你的分析有理有據,可以找到問題根源所在,那么解決問題就變得比較簡單了。”陳岳偉還分享道,解決問題的時候盡量要做到區(qū)別對待,對正常用戶還是保持它原有的邏輯,而對重度用戶可以調整部分處理方式,這樣就可以保證應用的影響范圍降到***,也可以讓應用的常規(guī)用戶得到完全無損的體驗。
在解決重度用戶的過程中,微信優(yōu)化團隊也總結了一些經驗做法。
首先是要保證一切可量化。一切可量化需要做到哪種程度?在解決問題的過程中,他們發(fā)現需要有數據來做支撐,這不僅僅在影響范圍評估時可以量化,其實在問題分析、問題影響范圍評估、上線效果驗證等方面都需要有量化的指標。假設沒有任何的精確數據告訴開發(fā)團隊解決問題的詳細相關數據,那就沒有辦法真正有效地去解決問題。
其次是灰度上線。陳岳偉透露,Facebook做了很多復雜的AB Test系統(tǒng),包含了性能、廣告在內。微信也做了一個類似的AB Test,對用戶聯(lián)系人、賬號、消息等核心模塊進行改造時,均通過灰度方式,逐步放量實驗新的解決方案,發(fā)現問題就重新修復,再次灰度放量,直到穩(wěn)定性非常高的時候,再全量放開發(fā)布。
采訪***陳岳偉告訴記者,他希望可以通過一些更好的措施把重度用戶的事情做得更好。目前來看做得還比較初級,以后將通過一些探索,通過某一些場景的深刻研究,把重度用戶優(yōu)化這件事情當作一個長期的事情來看待,能夠實現對重度用戶全局進行更精確的監(jiān)控和分析,提升問題發(fā)現和定位能力。
采訪嘉賓:
陳岳偉(Lylechen),微信客戶端開發(fā)團隊負責人,統(tǒng)籌微信在 iOS、Android、Mac 和 Windows 等平臺的開發(fā)管理工作。2010 年加入微信團隊,從無到有構建出微信的***個 iOS 版本,并持續(xù)不斷進行架構優(yōu)化和性能穩(wěn)定性打磨。近年來主要關注微信終端監(jiān)控體系以及微信重度用戶的性能提升和體驗優(yōu)化。
APMCon2017
APMCon是由聽云、極客邦科技與InfoQ聯(lián)合主辦的全球高水準APM技術盛會,聚焦當前最為關鍵的移動端、Web端和Server端的性能監(jiān)控和管理技術。整個會議包含智能運維、數據庫性能優(yōu)化、移動性能優(yōu)化、前端性能優(yōu)化、業(yè)務數據實時分析和可視化、微服務與容器與CDN加速等話題。
APMCon內容源于實踐并面向社區(qū),來自國內外的演講嘉賓依據熱點話題,面向5年以上的技術團隊負責人、中高級開發(fā)和運維人員、工程總監(jiān)分享APM技術創(chuàng)新、趨勢和***實踐。
【51CTO原創(chuàng)稿件,合作站點轉載請注明原文作者和出處為51CTO.com】