天天看點

iOS性能優化07-啟動優化01-冷啟動簡介One More Thing

APP的啟動可以分為2種:

  • 冷啟動(Cold Launch):從零開始啟動APP
  • 熱啟動 (Warm Launch):APP已經在記憶體中,在背景存活着,再次點選圖示啟動APP

APP啟動時間的優化

那我們通常所說的啟動時間優化都是再說的冷啟動的時間優化,其實Xcode是提供給我們一種分析啟動時間的方式,我們接下來試一試

  • 通過添加環境變量可以列印出APP的啟動時間分析(

    Edit Scheme -> Run -> Arguments

    )
    • DYLD_PRINT_STATISTICS

      設定為

      1

    iOS性能優化07-啟動優化01-冷啟動簡介One More Thing
    我們可以看到控制台列印出了
    Total pre-main time: 238.11 milliseconds (100.0%)
         dylib loading time: 173.78 milliseconds (72.9%)
        rebase/binding time: 126687488.9 seconds (15889931.7%)
            ObjC setup time:  15.16 milliseconds (6.3%)
           initializer time:  62.59 milliseconds (26.2%)
           slowest intializers :
             libSystem.B.dylib :   6.66 milliseconds (2.7%)
    libBacktraceRecording.dylib :   7.30 milliseconds (3.0%)
    libMainThreadChecker.dylib :  40.12 milliseconds (16.8%)
               
    • 如果需要更詳細的資訊,那就将

      DYLD_PRINT_STATISTICS_DETAILS

      設定為

      1

    我們看到這次輸出的資訊比上次要詳細很多
    total time: 981.15 milliseconds (100.0%)
    total images loaded:  334 (327 from dyld shared cache)
    total segments mapped: 21, into 370 pages
    total images loading time: 664.10 milliseconds (67.6%)
    total load time in ObjC:  20.03 milliseconds (2.0%)
    total debugger pause time: 402.89 milliseconds (41.0%)
    total dtrace DOF registration time:   0.22 milliseconds (0.0%)
    total rebase fixups:  17,951
    total rebase fixups time:   2.27 milliseconds (0.2%)
    total binding fixups: 460,826
    total binding fixups time: 229.13 milliseconds (23.3%)
    total weak binding fixups time:   0.03 milliseconds (0.0%)
    total redo shared cached bindings time: 254.48 milliseconds (25.9%)
    total bindings lazily fixed up: 0 of 0
    total time in initializers and ObjC +load:  65.34 milliseconds (6.6%)
                         libSystem.B.dylib :   9.14 milliseconds (0.9%)
               libBacktraceRecording.dylib :   7.73 milliseconds (0.7%)
                           libobjc.A.dylib :   1.55 milliseconds (0.1%)
                            CoreFoundation :   2.24 milliseconds (0.2%)
                libMainThreadChecker.dylib :  38.86 milliseconds (3.9%)
                    libLLVMContainer.dylib :   2.13 milliseconds (0.2%)
               

total symbol trie searches: 1116978

total symbol table binary searches: 0

total images defining weak symbols: 37

total images using weak symbols: 92

```

這些資料可能對大家來說不太直覺,這其實隻是提供給大家一個參考,一般我個人認為total time在

400~500ms之間就相對來說是比較正常的,如果時間太長就可能要進行相應的優化了,接下來我們來看看冷啟動的大概分哪幾個階段

APP冷啟動階段可以概括為3大階段

  • dyld
  • runtime
  • main
iOS性能優化07-啟動優化01-冷啟動簡介One More Thing

One More Thing

喜歡的朋友可以掃描關注我的公衆号(您的支援是我寫作的最大動力)

iOS性能優化07-啟動優化01-冷啟動簡介One More Thing