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