• App启动时间分析


    当前APP启动时间过长,于是学习并检测了APP启动流程中各个步骤的耗时,记录如下

    1,梳理优化方案

    APP的启动时间,直接影响用户对你的APP的第一体验和判断。如果启动时间过长,不单单体验直线下降,而且可能会激发苹果的watch dog机制kill掉你的APP(Xcode在debug模式下是没有开启watch dog的,所以我们一定要连接真机测试我们的APP)
    APP的启动可以分为两个阶段
    衡量main()函数执行之前的耗时
     
    对于衡量main()之前也就是time1的耗时,苹果官方提供了一种方法,即在真机调试的时候,勾选DYLD_PRINT_STATISTICS选项(如果想获取更详细的信息可以使用DYLD_PRINT_STATISTICS_DETAILS),如下图:
    系统级别的动态链接库,因为苹果做了优化,所以耗时并不多,而大多数时候,t1的时间大部分会消耗在我们自身App中的代码上和链接第三方库上。
    优化方案:
    main()执行之后
     
    第二阶段的耗时统计,我们认为是从main ()执行之后到applicationDidFinishLaunching:withOptions:方法最后,那么我们可以通过打点的方式进行统计。
     
    Objective-C项目因为有main文件,所以我么直接可以通过添加代码获取:
     
    main()函数中记录当前时间didFinishLaunchingWithOptions用当前时间减去记录时间
    优化方案:
    尽量使用纯代码编写,减少xib的使用;
     
    启动阶段的网络请求,是否都放到异步请求;
     
    一些耗时的操作是否可以放到后面去执行,或异步执行等。
     
    2,分步骤测试优化
    测量当前启动时间
    main函数后的启动时间
    App main 函数后的启动时间0.236194
    App main 函数后的启动时间0.263245
    App main 函数后的启动时间0.314452
     
    启动时间没有那么长,问题应该出在【APP启动后到首页显示】的时间上
    测试三组数据如下:
     
    App 启动后到首页展示出来后的时间 --- 15.250344
     
    App main函数到首页展示出来后的时间  15.486538
     
    App 启动后到首页展示出来后的时间 --- 16.896826
     
    App main函数到首页展示出来后的时间  17.160071
     
    App 启动后到首页展示出来后的时间 --- 16.505710
     
    App main函数到首页展示出来后的时间  16.820162
     
     
    发现的问题
     
    1,启动后警告
    Main Thread Checker: UI API called on a background thread: -[UIApplication canOpenURL:]
     
    解决方案:查找后发现初始化三方库的函数放到子线程,移到主线程后,该UI警告消失,启动后卡顿的问题解决。
     
     
    2,启动前警告,JPush存在问题 
    =================================================================
    Main Thread Checker: UI API called on a background thread: -[UIApplication currentUserNotificationSettings]
    PID: 15459, TID: 3156238, Thread name: org.hxhg.jpush.thread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
    Backtrace:
    4   MengZhu                             0x00000001048196fc -[JPUSHAPNSStateReport init] + 236
    5   MengZhu                             0x000000010484a408 -[JPUSHClientController UDPReportAPNSState] + 44
    6   MengZhu                             0x0000000104849f14 -[JPUSHClientController setup] + 868
    7   Foundation                          0x00000001c084b894 <redacted> + 336
    8   CoreFoundation                      0x00000001bfd57018 <redacted> + 24
    9   CoreFoundation                      0x00000001bfd56f98 <redacted> + 88
    10  CoreFoundation                      0x00000001bfd56880 <redacted> + 176
    11  CoreFoundation                      0x00000001bfd517bc <redacted> + 1004
    12  CoreFoundation                      0x00000001bfd510b0 CFRunLoopRunSpecific + 436
    13  CoreFoundation                      0x00000001bfd51e0c CFRunLoopRun + 80
    14  MengZhu                             0x00000001048517b0 -[JPUSHThread clientThreadMain] + 100
    15  Foundation                          0x00000001c084b6a4 <redacted> + 984
    16  libsystem_pthread.dylib             0x00000001bf9e42c0 <redacted> + 128
    17  libsystem_pthread.dylib             0x00000001bf9e4220 _pthread_start + 44
    18  libsystem_pthread.dylib             0x00000001bf9e7cdc thread_start + 4
     
    原JPush版本为2.1.8 升级到3.2.1之后,线程问题解决
     
    最新启动时间为
    App 启动后到首页展示出来后的时间 — 5.318915
    App main函数到首页展示出来后的时间 --- 5.599773
     
     继续优化中···
     
     
  • 相关阅读:
    对类型化数组的理解
    vue中$bus的传参的坑
    在dva框架和create-react-app创建出来的框架中修饰器语法与按需加载引入antd分别配置
    dva与create-react-app的结合使用
    网络请求之jsonp封装
    js中的超过16位数字相加问题
    dva框架简单描述使用
    后台管理系统之图片上传功能
    剪贴板功能的实现
    前后端登录注册之node剖析与token的使用状态
  • 原文地址:https://www.cnblogs.com/huaida/p/10970179.html
Copyright © 2020-2023  润新知