1、APP啟動穩定性和鏈路優化實踐李潔美團李潔美團 點評基礎質量負責人在移動端CICD測試組件、動態化技術棧測試策略、APP URL合規、增長喚起等通用測試工具和監控能力建設上有較多實踐經驗。目錄CONTENTS議題背景01 APP啟動管控和治理02 啟動穩定性保障03 啟動用戶體驗提升04 展望未來05 01議題背景議題背景-APP啟動重要性國內各APP的崩潰也會迅速沖上微博話題u據Dimensional Research的一項調查,61的用戶希望APP在4秒內啟動,而49的用戶希望在2秒內響應輸入。如果應用發生崩潰,53的用戶會將APP卸載。u據bugsnag機構統計,84%的用戶會在兩次啟動
2、崩潰后放棄打開APP,44%的用戶可能直接卸載APP。uWhatsApp是一款可以免費撥打電話和發送短消息的通信軟件,在全球擁有約20億活躍用戶,2022年10月因發生崩潰,當天Meta的股價下跌了0.7%。u用戶能忍受的最長響應時間是5秒u如果響應時間超過5秒,50%移動應用用戶會放棄u三分之一失望的用戶會轉向競爭對手的應用-蟬大師APP啟動過程分析啟動u廣義:點擊圖標到首頁數據加載完畢u狹義:點擊圖標到Launch Image完全消失第一幀初始化項比如網絡庫、日志、Crash 捕獲與上報、線程管理、熱修復、配置下發、視頻、直播、支付等APP啟動能力現狀和目標缺少監控2020年現狀初始化項亂
3、無規范和管控標準APP啟動變慢耦合嚴重,維護成本高目標穩快02APP啟動管控和治理初始化項管控能力建設方向啟動管控和治理-啟動工程化啟動項在App啟動過程中需要完成的某項工作,我們稱之為一個啟動項。例如:某個SDK的初始化 某個功能的預加載 定位相關 異常監控 性能監控.控得住-玩轉啟動項增量啟動項如何加入?啟動項分組?業務映射關系?啟動項重要性和依賴關系?啟動項的啟動時機?啟動項啟動工程化后,雙端(Android、iOS)分別有xx啟動項控得住-啟動項分級依賴所有業務場景都需要,一般為重要基礎能力,如網絡初始化、監控、配置下發、日志系統等使用范圍比較廣,為某一類技術棧的初始化項,例如動態化框
4、架、模塊化框架、接口框架初始化項等其他啟動項啟動項功能啟動項功能注冊進程注冊進程啟動項依賴啟動項依賴啟動項分級啟動項分級CrashReportTaskCrash上報一級xxx1Taskxx初始化一級xxx2Task冷啟動上報二級xxx3Task性能監控初始化二級xxx4Task靜態模型初始化其他xxx5Task圖片配置初始化其他xxx6TaskXx日志初始化二級xxx7Task網絡庫初始化一級xxx8Task預加載初始化其他xxx9Task賬號初始化二級特定業務場景需要,例如消息、收藏、直播、支付初始化項等二級啟動項一級啟動項控得住-啟動項分階段加載(啟動時機)進程創建啟動項動態化容器首跳頁面
5、系統行為包體大小相關xxms依賴定位接口請求耗時xxms啟動項執行多啟動項耗時xxms容器引擎加載JS動態下載xxms啟動項Push喚起廣告喚起桌面喚起頁面標識啟動項注冊技術棧/頁面級-啟動項配置應用啟動路由階段次級頁面首跳頁面全部啟動項頁面級-啟動項配置次級頁面頁面級-啟動項配置控得住-自定義啟動項組(啟動時機)進程創建啟動項動態化容器首跳頁面次級頁面啟動項控得住-啟動項準入卡控基于啟動項能力的質量提升思考穩快03啟動穩定性保障啟動穩定性分析舉例問題:xx年 x月x日 xx點xx到xx點05之間,大眾點評App iOS 端爆發啟動Crash,Crash總量xxW+,影響用戶xxW+。原因:A
6、PP啟動初始化模塊化框架時,模塊配置服務獲取配置數據后觸發異常,從而引發Crash。當時的可處理手段:配置回滾據統計崩潰發生最多的階段是應用初始化階段,點評APP有51.8%的Crash量是在用戶啟動階段。啟動高可用、容災方案建設減少此類問題發生降低故障影響啟動降級能力建設-方案設計啟動降級能力建設-安全模式安全模式(小程序)兜底止損觸發機制恢復機制啟動降級能力建設-方案設計監控項告警閾值監控頻次告警頻次Crash增量告警單條Crashxx條/1分鐘1分鐘1分鐘Crash總量告警單條Crash1.黑名單閾值xx/天2.常規閾值xx/天5分鐘5分鐘配置項說明總開關0-禁用啟動項功能關閉1-禁用啟
7、動項功能開啟按黑名單摘除啟動項數組,禁用在其中的啟動項按啟動等級降級禁用低于該等級的啟動項啟動演練提升APP穩定性-目標啟動演練提升APP穩定性-可測性改進啟動演練提升APP穩定性-方案流程啟動演練提升APP穩定性-演練效果xx個演練解決問題0個近3年S4及以上啟動問題X min內故障降級處理時長04啟動用戶體驗提升提升用戶體驗助力APP增長增長獲客需求,大量的廣告投放優化啟動速度提升用戶體驗12啟動鏈路性能優化背景APP啟動核心鏈路首頁內容頁團單頁POI頁榜單頁二跳頁面后繼頁面啟動鏈路核心鏈路桌面啟動外部喚起xx個xx個xx個應用啟動首頁加載次級頁面網絡啟動項埋點啟動項日志啟動項圖片庫啟動項
8、緩存啟動項存儲庫啟動項預加載啟動項內存監控啟動項端智能啟動項地圖啟動項Push啟動項圖片監控啟動項動態加載啟動項直播啟動項xx%xx%首頁秒開率xxxmsxxxms首頁曝光耗時桌面啟動-啟動項分階段加載及結果秒開率:指頁面打開時間小于等于1秒的次數比率外部喚起-啟動時機管理網絡啟動項埋點啟動項日志啟動項緩存啟動項直播啟動項Web啟動項安全簽名啟動項網絡啟動項埋點啟動項日志啟動項緩存啟動項直播啟動項Web啟動項安全簽名啟動項外部喚起落地頁不同!頁面非必須啟動項可以延遲加載嗎?外部喚起-啟動時機管理(延遲加載策略)網絡啟動項埋點啟動項緩存啟動項自研動態化啟動項網絡啟動項埋點啟動項小程序框架啟動項緩
9、存啟動項網絡啟動項埋點啟動項Web啟動項緩存啟動項網絡啟動項埋點啟動項緩存啟動項RN啟動項極限啟動項組分技術棧1.自研動態化:xx個2.小程序框架:xx個3.Web頁面:xx個4.RN框架:xx個自研動態化頁面小程序框架頁面Web頁面RN框架頁面內容搜索頁圖片庫啟動項富文本啟動項外部喚起-啟動時機管理頁面越來越多啟動項越加越多性能又開始劣化了能不能按照頁面維度去執行啟動項+自研動態化框架極限啟動項組(xx個啟動項)自研動態化框架頁面外部喚起-自定義核心啟動項組圖片庫啟動項設備標識啟動項Web啟動項.網絡啟動項埋點啟動項日志啟動項緩存啟動項Web圖片庫啟動項設備標識啟動項RN啟動項.網絡啟動項埋
10、點啟動項日志啟動項緩存啟動項RN框架圖片庫啟動項小程序啟動項設備標識啟動項網絡啟動項埋點啟動項日志啟動項緩存啟動項小程序框架圖片庫啟動項動態化啟動項設備標識啟動項網絡啟動項埋點啟動項日志啟動項緩存啟動項自研動態化框架技術棧維度核心啟動項組頁面維度核心啟動項組圖片庫啟動項設備標識啟動項動態化啟動項.網絡啟動項埋點啟動項日志啟動項緩存啟動項內容搜索頁預加載啟動項設備標識啟動項動態化啟動項.網絡啟動項埋點啟動項日志啟動項緩存啟動項必吃套餐頁賬號啟動項設備標識啟動項動態化啟動項.網絡啟動項埋點啟動項日志啟動項緩存啟動項大牌搶購頁啟動用戶體驗提升-增長投放場景應用投放URL舉例:基礎鏈接基礎鏈接+啟動項
11、組控制參數啟動項組控制參數+數據數據統計參數統計參數+其他其他參數等參數等技術棧維度-自定義啟動項優化結果xx個xx個應用啟動&首跳次級頁面網絡啟動項埋點啟動項日志啟動項圖片庫啟動項緩存啟動項動態化啟動項預加載啟動項內存監控啟動項端智能啟動項地圖啟動項視頻啟動項直播啟動項.喚起率頁面曝光耗時xx%xx%xxxmsxxxms頁面維度-自定義啟動項優化結果注:喚起率=頁面PV/廣告點擊投放頁面曝光耗時(前)曝光耗時(后)喚起率(前)喚起率(后)必吃團購詳情頁xxxmsxxxmsxx%xx%必吃套餐列表頁xxxmsxxxmsxx%xx%大牌日活動頁xxxmsxxxmsxx%xx%酒店頻道頁xxxmsxxxms-xx%當地人推薦頁xxxmsxxxms-正在投放04展望未來啟動穩定性和鏈路優化總結展望未來完善啟動項能力全鏈路啟動監控啟動項動態配置短路徑啟動項優化能力建設全鏈路啟動性能監控啟動項能力應用自定義啟動項能力應用在更多的業務上感謝聆聽