Just My Life & My Work

[iOS] APP啟動時間測量

現在做產品跟以往做代工不太一樣,代工只要將功能完成就能交差了事,而產品則除了完成功能外,還要進一步優化性能,包含使用者體驗 (User Experience)

在此我們先來測量APP啟動時間,如上圖啟動時間中的pre-main time。我發現以不同的裝置來使用同一個App,啟動時間都不一樣呢!當然這跟裝置規格有關係,等等就來測量差異多少~

如何測量App啟動時間?

在Xcode的菜單中選擇Project→Scheme→Edit Scheme,然後找到Run → Environment Variables → +,添加name為DYLD_PRINT_STATISTICS而value為1的環境變量。

之後編譯運行後會在控制台看到如下內容:

iPhone 6 iOS 11.2.4

Total pre-main time: 1.0 seconds (100.0%)
dylib loading time: 113.28 milliseconds (10.4%)
rebase/binding time: 53.80 milliseconds (4.9%)
ObjC setup time: 482.85 milliseconds (44.6%)
initializer time: 432.31 milliseconds (39.9%)
slowest intializers :
libSystem.B.dylib : 34.08 milliseconds (3.1%)
libBacktraceRecording.dylib : 38.73 milliseconds (3.5%)
libMainThreadChecker.dylib : 126.64 milliseconds (11.7%)
ModelIO : 52.36 milliseconds (4.8%)
HappyDaily : 287.03 milliseconds (26.5%)

得出結論,以我正在開發的產品HappyDaily專案來說明:

  • main()函數之前總共使用了1.0 seconds。
  • 在1.0 seconds中,加載動態庫用了113.28ms,指針重定位使用了53.80ms,ObjC類初始化使用了482.85ms,各種初始化使用了432.31ms。
  • 在初始化耗費的432.31ms中,用時最多的五個初始化是libSystem.B.dylib、libBacktraceRecording.dylib、libMainThreadChecker.dylib、ModelIO以及HappyDaily。

以上的數據是使用我已經用4年多的iPhone 6來測量,觀察到啟動速度每隔一年變得越來越慢,這是Apple有意無意造成的現象,就是要消費者快點更換新機囉!

我目前港商公司手中有三台測試機,這三台都比我的iPhone 還要新穎,於是乎測到的數據肯定是比較優囉!

iPhone 8+ iOS 12.1.1

Total pre-main time: 215.25 milliseconds (100.0%)
dylib loading time: 79.38 milliseconds (36.8%)
rebase/binding time: 10.09 milliseconds (4.6%)
ObjC setup time: 44.93 milliseconds (20.8%)
initializer time: 80.61 milliseconds (37.4%)
slowest intializers :
libSystem.B.dylib : 7.53 milliseconds (3.5%)
libMainThreadChecker.dylib : 31.05 milliseconds (14.4%)
GirlDaily : 69.72 milliseconds (32.3%)

iPhone XS Max iOS 12.0

Total pre-main time: 290.69 milliseconds (100.0%)
dylib loading time: 168.50 milliseconds (57.9%)
rebase/binding time: 42.50 milliseconds (14.6%)
ObjC setup time: 18.17 milliseconds (6.2%)
initializer time: 61.05 milliseconds (21.0%)
slowest intializers :
libSystem.B.dylib : 7.05 milliseconds (2.4%)
libMainThreadChecker.dylib : 24.55 milliseconds (8.4%)
GirlDaily : 44.94 milliseconds (15.4%)

iPhone SE iOS 11.4.1

Total pre-main time: 449.98 milliseconds (100.0%)
dylib loading time: 189.04 milliseconds (42.0%)
rebase/binding time: 43.80 milliseconds (9.7%)
ObjC setup time: 86.72 milliseconds (19.2%)
initializer time: 130.28 milliseconds (28.9%)
slowest intializers :
libSystem.B.dylib : 11.24 milliseconds (2.4%)
libBacktraceRecording.dylib : 9.44 milliseconds (2.0%)
libMainThreadChecker.dylib : 31.13 milliseconds (6.9%)
ModelIO : 15.89 milliseconds (3.5%)
GirlDaily : 102.45 milliseconds (22.7%)

接下來我們來研究如何優化App啟動時間吧:)~

參考:iOS性能優化- APP啟動時間優化iOS App啟動時間優化原理

Comments on: "[iOS] APP啟動時間測量" (1)

  1. […] 繼APP啟動時間測量後,接下來要做APP啟動時間優化,這一部份開發者能夠干涉嗎?其實是可以的! […]

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: