avatar

Catalog
iOS性能优化07-启动优化01-冷启动简介

APP的启动可以分为2种:

  • 冷启动(Cold Launch):从零开始启动APP

  • 热启动 (Warm Launch):APP已经在内存中,在后台存活着,再次点击图标启动APP

APP启动时间的优化

那我们通常所说的启动时间优化都是再说的冷启动的时间优化,其实Xcode是提供给我们一种分析启动时间的方式,我们接下来试一试

  • 通过添加环境变量可以打印出APP的启动时间分析(Edit Scheme -> Run -> Arguments)

    • DYLD_PRINT_STATISTICS设置为1

      我们可以看到控制台打印出了

      Code
      1
      2
      3
      4
      5
      6
      7
      8
      9
      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

      我们看到这次输出的信息比上次要详细很多

      Code
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
        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

One More Thing

点击查看 2020—课程列表 全网IT各种资源有需求的可以微我,或者你喜欢的课程都可以给我发链接剩下的我来搞定

喜欢的朋友可以扫描关注我的公众号(多多点赞,多多打赏,您的支持是我写作的最大动力)关注有福利可以使用免费梯子自由上网

iOS_DevTips

Author: 木子召
Link: https://lizhaobomb.github.io/2020/03/03/iOS%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%9607-%E5%90%AF%E5%8A%A8%E4%BC%98%E5%8C%9601-%E5%86%B7%E5%90%AF%E5%8A%A8%E7%AE%80%E4%BB%8B/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment