移動APP卡頓問題解決實踐

效能優化實踐者發表於2021-11-17

一、專案背景

本APP為面向使用者的一款基於NFC的安全支付產品。本APP本作品將密碼學原理、計算機技術、NFC通訊技術和數字貨幣思想有機結合,在全面保障安全性的同時最大限度的提高了消費者的支付體驗。相對於傳統方案,本作品具有以下特點:1)實現貨幣的數字化;2)商家與使用者雙向身份認證;3)交易過程安全保障;4)完善的移動支付體系;5)離線支付,脫離網路;6)賬戶丟失可找回;7)差錯協商,保障交易雙方利益;8)標籤型商城,便捷最大化;9)成本低廉,便於推廣。
使用者是需要使用本產品進行消費的客戶,需要安裝使用者錢包客戶端。主要功能結構圖如下所示:

商家是商品或者服務的提供方,需要安裝商家客戶端。主要功能結構圖如下所示:

二、所遇到的挑戰

本APP使用者反饋APP使用過程中存在卡頓等問題。對於手機APP而言,流暢度的重要性是不言而喻。為了提升流暢度,Google對Android系統進行了大量的優化,包括使用了GPU硬體加速,引入了VSync,把Dalvik換成了Art等。那麼對於我們的APP,出現卡頓問題,勢必會影響使用者體驗感,所以必須對APP卡頓的問題進行分析,並且予以解決。

三、解決問題的步驟

首先,我們進行了幾輪的程式碼review,嘗試從邏輯層面優化程式碼結構,從而減少卡頓問題的發生。這方面的優化,主要是找出在主執行緒中耗時較大的函式,通過優化邏輯去減少API的耗時,分析CPU的工作,儘量讓CPU執行主執行緒中的工作。這方面的工作有很多,比如優化邏輯去減少API的耗時,快取資料以方便更快地對資料進行載入,把耗時的操作移出主執行緒,在子執行緒中進行操作。

其次,優化資料庫表結構,將一些常用的資料放到快取中,在非同步更新到資料庫中。可以把所有的資料庫操作都統一放到一個執行緒佇列當中。

最後,需要完善監控體系。因為雖然產品上線之前,必然會經過嚴密的測試工作,但還由於模式的固定以及測試死角的存在,比如,對於較大規模的APP產品,測試人員是基本無法做到覆蓋到全部的手機機型和ROM,所以很多問題必然還是要依賴於真正上線之後使用者的反饋。在這種情況下,完善的質量監控方案就顯得非常必要,所以需要建立一套牢固的監控體系。這樣,對線上產品的APP質量問題才能第一時間召回,並做到快速修復。那對於如何完善監控體系,目前來看,是有兩個選擇的,一種是基於開源的Skywalking、Cat、Zipkin、Pinpoint等APM系統,以Skywalking為例來講,其是一款基於分散式跟蹤的應用程式效能監控系統。SkyWalking 的核心是資料分析和度量結果的儲存平臺,通過 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量資料,SkyWalking Collecter 對資料進行分析和聚合,儲存到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最後我們可以通過 SkyWalking UI 的視覺化介面對最終的結果進行檢視。Skywalking 支援從多個來源和多種格式收集資料:多種語言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘測、Envoy 度量等資料格式。整體架構看似模組有點多,但在實際上還是比較清晰的,主要就是通過收集各種格式的資料進行儲存,然後展示。所以搭建 Skywalking 服務我們需要關注的是 SkyWalking Collecter、SkyWalking UI 和 儲存裝置,SkyWalking Collecter、SkyWalking UI 官方下載安裝包內已包含,最終我們只需考慮儲存裝置即可。但是使用這種系統,就會面臨工程師不熟悉,工期緊張等問題。第二種選擇就是使用成熟的APM系統,這種,不言而喻,會有較大的短期資金壓力,但是鑑於我們專案的緊迫性,我們選擇使用友盟+應用效能監控平臺U-APM。友盟+的U-APM應用效能監控平臺基於強大的捕獲採集能力,快速定位錯誤根源,提供使用者維度的崩潰統計,快速還原崩潰現場,並設立多種警告通道,助力開發者7*24監控應用情況。非常適用於我們的APP。

四、專案總結

交易安全是當前網際網路+支付儲存應用設計的重中之重。我們的APP為 了實現交易流程的安全與快捷,在使用 NFC 功能短距安全傳輸的同時,設計了以下交易流程增強安全性。本APP具有數字化、移動化、高效化的優勢特點。但在APP執行期間出現了卡頓的問題,影響了使用者體驗感,於是我們通過修改程式碼邏輯及資料庫表結構,同時完善監控體系的方法解決優化了這個問題。

作者:陳靜茹

相關文章