版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2021.05.12 星期三 |
前言
MetricKit
由iOS13系統(tǒng)進(jìn)引入洼畅,用來(lái)匯總和分析有關(guān)異常和崩潰診斷以及電源和性能指標(biāo)的每個(gè)設(shè)備的報(bào)告棚赔。下面我們就一起來(lái)看下這個(gè)框架靠益。感興趣的可以看下面幾篇文章。
1. MetricKit框架詳細(xì)解析(一) —— 基本概覽(一)
Overview
客戶期望應(yīng)用程序運(yùn)行良好芋浮。 啟動(dòng)時(shí)間過(guò)長(zhǎng)或輸入響應(yīng)緩慢的應(yīng)用可能會(huì)向用戶顯示好像它無(wú)法正常工作或呆滯壳快。 發(fā)出大量大型網(wǎng)絡(luò)請(qǐng)求的應(yīng)用可能會(huì)增加用戶的數(shù)據(jù)費(fèi)用并耗盡設(shè)備電池的電量眶痰。 這些行為中的任何一種都會(huì)使用戶感到沮喪,并導(dǎo)致他們卸載應(yīng)用程序裆站。
通過(guò)科學(xué)地解決問(wèn)題來(lái)計(jì)劃和實(shí)施性能改進(jìn):
- 1) 收集有關(guān)用戶看到的問(wèn)題的信息黔夭。
- 2) 評(píng)估您的應(yīng)用行為本姥,以找出問(wèn)題的原因。
- 3) 計(jì)劃一項(xiàng)更改以改善這種情況氛赐。
- 4) 實(shí)施更改。
- 5) 觀察應(yīng)用程序的性能是否提高滓侍。
這些活動(dòng)形成了一個(gè)持續(xù)改進(jìn)的循環(huán)撩笆,如下圖所示缸浦。
最大限度地減少資源使用使用戶受益裂逐,并改善他們對(duì)您的應(yīng)用程序的認(rèn)知。這里有一些特殊的好處:
- 減少應(yīng)用啟動(dòng)時(shí)間可改善用戶體驗(yàn)弥姻,并減少iOS看門狗定時(shí)器終止應(yīng)用的機(jī)會(huì)篙悯。
- 減少整體內(nèi)存使用量可以減少iOS在后臺(tái)釋放應(yīng)用程序內(nèi)存的可能性鸽照,并在用戶切換回您的應(yīng)用程序時(shí)提高響應(yīng)速度。
- 減少磁盤寫(xiě)入可提高應(yīng)用程序的整體性能定血,使其響應(yīng)速度更快澜沟,并減少用戶設(shè)備存儲(chǔ)的磨損峡谊。
- 降低掛起率和掛起持續(xù)時(shí)間可以提高用戶對(duì)應(yīng)用程序性能和響應(yīng)速度的認(rèn)識(shí)。
- 減少電池消耗和使用耗電設(shè)備功能可以使您的應(yīng)用程序更可靠濒析,并有助于確保在需要時(shí)可以使用其余用戶設(shè)備号杏。
即使您的測(cè)量和觀察結(jié)果顯示沒(méi)有緊迫的性能問(wèn)題斯棒,還是建議您執(zhí)行性能改進(jìn)周期并進(jìn)行預(yù)防性工作,以防止應(yīng)用性能下降庭惜。
Gather Data About Your App's Current Performance
要全面了解您的應(yīng)用的性能蜈块,請(qǐng)結(jié)合以下多種來(lái)源的信息:
- 使用Xcode Organizer可以查看有關(guān)啟動(dòng)時(shí)間,用戶界面響應(yīng)性,對(duì)存儲(chǔ)的寫(xiě)入器一,內(nèi)存使用和能耗的度量厨内,以及針對(duì)磁盤寫(xiě)入雏胃,崩潰和能耗的診斷報(bào)告。利用
Organizer
方仿,您可以按設(shè)備型號(hào)统翩,應(yīng)用程序版本和用戶百分位數(shù)細(xì)分度量厂汗。有關(guān)更多信息,請(qǐng)參閱 Analyzing the Performance of Your Shipping App贾节。 - 使用MetricKit收集指標(biāo)并將其記錄在您自己的工具中栗涂。這些指標(biāo)采用直方圖的形式霎匈,記錄了一天中觀察到的值的頻率铛嘱。
MetricKit
超越了Metrics organizer
中顯示的度量標(biāo)準(zhǔn)袭厂,還包括平均像素亮度纹磺,蜂窩網(wǎng)絡(luò)狀況以及與應(yīng)用程序中的自定義OSSignpost
事件相關(guān)聯(lián)的持續(xù)時(shí)間亮曹。 - 從TestFlight測(cè)試人員那里獲取有關(guān)他們使用您的應(yīng)用Beta版的體驗(yàn)的反饋照卦。填寫(xiě)您的Beta版本的
Test Information
頁(yè)面,并要求測(cè)試人員提供有關(guān)您應(yīng)用性能的反饋采转。包括電子郵件地址瞬痘,以便測(cè)試人員可以報(bào)告他們的發(fā)現(xiàn)框全。 - 調(diào)查您的用戶對(duì)他們使用您的應(yīng)用的
released
版本的體驗(yàn)的反饋。邀請(qǐng)用戶通過(guò)電子郵件或應(yīng)用內(nèi)的專用界面發(fā)送反饋拆撼。向他們?cè)儐?wèn)他們使用該應(yīng)用程序的體驗(yàn)-哪種方法有效情萤,以及遇到的任何問(wèn)題摹恨。
Determine the Most Important Aspect to Improve
利用從觀察中獲得的信息以及對(duì)應(yīng)用程序目的和預(yù)期使用模式的理解晒哄,發(fā)現(xiàn)最大的改進(jìn)機(jī)會(huì)。某些性能問(wèn)題與所調(diào)查的應(yīng)用程序類型無(wú)關(guān)柒傻。啟動(dòng)時(shí)間長(zhǎng)或?qū)τ脩舨倏v界面的嘗試無(wú)響應(yīng)的應(yīng)用程序會(huì)導(dǎo)致用戶感到他們無(wú)法控制該應(yīng)用程序红符。
另一方面,如果您在Metrics organizer
或MetricKit
中看到的某個(gè)指標(biāo)的最大值表示該應(yīng)用程序已按預(yù)期使用致开,則該值可能并不表示要解決的最重要問(wèn)題双戳。例如糜芳,與背景音頻播放相關(guān)的電源使用對(duì)于播客播放器來(lái)說(shuō)可能不是問(wèn)題峭竣,用戶希望在后臺(tái)播放。但是莫辨,如果您的應(yīng)用是一個(gè)沒(méi)有后臺(tái)玩法的游戲毅访,那么看到該指標(biāo)占主導(dǎo)地位將是令人驚訝的喻粹。
看到該指標(biāo)在指標(biāo)報(bào)告中占主導(dǎo)地位守呜,可能表明可以實(shí)現(xiàn)效率節(jié)省山憨,但最有影響力的變化可能是使用了輔助服務(wù)郁竟,而這些輔助服務(wù)并不影響應(yīng)用程序的主要功能。播客播放器可能很少需要使用粗粒度定位服務(wù)向聽(tīng)眾推薦本地興趣播客蓖议,但是與頻繁跟蹤用戶的精確位置相關(guān)的高能耗可能表明需要進(jìn)行更改勒虾。
Profile Your App
使用Instruments來(lái)配置您的應(yīng)用瘸彤,選擇與您正在考慮的metric
相關(guān)的配置文件模板:
- 無(wú)響應(yīng)并掛起:使用Time Profiler模板。
- 內(nèi)存問(wèn)題:使用Allocations和Leaks模板玻靡。
- 功耗問(wèn)題:使用Energy Log模板掏婶。
- I / O問(wèn)題:使用File Activity模板雄妥。
- 與網(wǎng)絡(luò)相關(guān)的問(wèn)題:使用Network template。
通過(guò)在設(shè)備(而不是模擬器)上進(jìn)行性能分析瘟则,可以獲得更高保真度的測(cè)量結(jié)果醋拧。如果您收集的信息表明您的應(yīng)用在特定類別或型號(hào)的設(shè)備上的性能不佳淀弹,請(qǐng)對(duì)該設(shè)備進(jìn)行profile
薇溃。
查找導(dǎo)致性能問(wèn)題的代碼,并制定解決方案琉用。請(qǐng)記住邑时,您的更改可能未定位到特定的行或者函數(shù)特姐,并且可能需要對(duì)應(yīng)用程序進(jìn)行重大的體系結(jié)構(gòu)更改到逊。例如,要減輕由于同步下載網(wǎng)絡(luò)資源而導(dǎo)致的掛起脑题,請(qǐng)引入后臺(tái)操作來(lái)處理網(wǎng)絡(luò)(請(qǐng)參閱Downloading Files in the Background)叔遂,并在下載完成后在主線程上執(zhí)行UI更新已艰。
Make the Next Change
實(shí)施您根據(jù)調(diào)查計(jì)劃的更改。 在Instruments
中創(chuàng)建一個(gè)''after''
配置文件凿叠,您可以將其與“before”
配置文件進(jìn)行比較盒件,以確保您的更改帶來(lái)了改善舱禽。 考慮在XCTest中編寫(xiě)性能測(cè)試誊稚,以防止將來(lái)性能下降,并記錄該問(wèn)題存在并已得到解決城瞎。
Compare the Changed Behavior with Your Original Data
在更改您的應(yīng)用程序以解決所觀察到的最重要的性能問(wèn)題之后全谤,請(qǐng)確認(rèn)該更改是否具有預(yù)期的效果,并且改善的水平足夠补憾。 在Xcode
的Metrics organizer
中使用每個(gè)應(yīng)用版本的性能指標(biāo)圖盈匾,以查看更改是改善還是降低削饵。
最后,確定您正在使用的指標(biāo)仍然是最重要的启昧,或者在性能改進(jìn)周期的下一次迭代中數(shù)據(jù)是否指向另一個(gè)度量標(biāo)準(zhǔn)密末。
Additional Resources
這些文章严里,Xcode
幫助主題和WWDC會(huì)話視頻包含有關(guān)使用Xcode
和Instruments
評(píng)估和改善應(yīng)用程序性能的更多信息。
Performance Tools and Techniques
- Diagnose Performance Issues With the Xcode Organizer
- Eliminate Animation Hitches With XCTest
- Instruments Help
- Logging
- Performance on iOS and watchOS
- Practical Approaches to Great App Performance
- Profile your app's performance
- Visual Debugging with Xcode
- What's New in MetricKit
- Why is my App Getting Killed?
- Writing Performance Tests
Energy Consumption
- Achieving All-day Battery Life
- Debugging Energy Issues
- Energy Efficiency and the User Experience
- Energy Efficiency Guide for iOS Apps
- Energy Efficiency Guide for Mac Apps
- Identify Trends With the Power and Performance API
- Monitor a running app using debug gauges
- Monitor your app’s energy usage
- Profile your app's energy use
- What’s New in Energy Debugging
- Writing Energy Efficient Apps
- Xcode Energy Organizer
Topics
1. Memory
2. App Launch Time
3. Disk Writes
4. User Interface Hangs
后記
本篇主要講述了
Improving Your App's Performance
迷帜,感興趣的給個(gè)贊或者關(guān)注~~~