最近收到反饋——IM模塊語音按鈕點擊不靈敏,反應慢,有時點了沒反應。異步
初看「有時點了沒反應」覺得是語音按鈕過小沒點到,畢竟iPhoneX導航欄返回按鈕也曾被反饋過難按,緣由是 同樣大小的返回按鈕在劉海屏上變得難觸。ide
照這思路調了一下按鈕大小而後進行測試 函數
(這怎麼可能沒點到)特地和WX的語音按鈕對比了一下大小。工具
在真機上測試一遍。 測試
如圖,在跳轉到聊天控制器後,已經第一時間僅一次按住按鈕(未鬆手),可是仍是過了一段時間才加載出來。得出結論:用戶點擊語音按鈕後,未等到加載出來就鬆手,形成點擊不到的假象。其實是加載慢。優化
這就涉及到優化問題了。以前聽過杜優秀介紹過一款傳說中的時間分析神器,一直沒用過。是時候請上今天的主角——Time Profiler。線程
PS:還有個項目配置,不配置看上去有一些地方顯示一坨十六進制碼,原理和bugly同樣。更多請查看https://www.jianshu.com/p/0fd670547235 測試過不配置好像沒太大問題。 配置好後按如下流程走 0⃣️先將程序運行在設備上。 1⃣️在圖中1處選好設備和程序。 2⃣️在圖中2處勾選上Hide System Libraries,顧名思義隱藏系統函數,減小干擾。 3⃣️點擊圖中3處錄製按鈕,此時設備將會從新開始運行程序(不進行編譯過程)。 4⃣️在設備上操做App。 5⃣️點擊圖中3處錄製按鈕中止監測。3d
開始測試! cdn
其實在文頭動圖中除了語音呼出慢,還注意到點擊聯繫人後跳轉到聊天控制器(ChatViewController)也很慢(簡書上的gif加快播放速率了,實際很慢),看看能不能順手解決。對象
在圖中能夠看出該控制器viewDidLoad竟然用了2.14s,難怪跳轉這麼慢。
展開後發現罪魁禍首setupFaceView佔用了2.05s。 這個方法做用——配置表情的view,其中有許多頁表情😊。想來裏面確定用了重用機制,也是在異步線程中執行,除此我想不到別的優化方法。看來只能騙一騙用戶。 理性分析一波,由於用戶進入該界面一般並不會立刻點擊表情列表,並且該view運用懶加載,因此把該方法放到viewDidAppear裏,不會重複建立對象,同時加快主界面的顯示,這是慣用的小伎倆了。
修改後再次測試發現跳轉速度賊快(圖見文尾)。
再回到語音呼出慢這個問題。 這個有點棘手,在模擬器上運行呼出很快,可是真機上卻龜速。 一開始誤覺得緣由是模擬器的跟真機的配置不徹底相同(雖然配置不一樣這件事是真的),但結果並非由於配置緣由。
觀察右邊Main Thread,發現呼出兩次,主線程時間並未增長多少。再觀察下方時間有變更的方法有兩個。 1⃣️-[UIButton(SDAutoLayoutButton) sd_button_layoutSubviews] 2⃣️-[UUProgressHUD startAnimation]
兩個方法分別是button和label適應,整體也沒佔多少時間,即關鍵不在這上面。但爲何這麼慢呢?
仔細觀察發現,手指按住按鈕後過了一段時間,時間分析器纔開始增長時間。
最終發現緣由是按鈕延時響應。 參考文章https://www.jianshu.com/p/ac821fb9b3d0 參考文章https://www.jianshu.com/p/93b08b97968b
照第一篇文章的方法解決了該問題。 最終修改爲效,與文章開頭的動圖同樣的操做。
以上感嘆一句,Time Profiler真是一款好工具。