iOS 专项测试--启动时长

App的启动分为冷启动和热启动。如果启动时间过长,首先引起的用户体验直线下降,再者是可能会激发苹果的watch dog机制kill掉App。

APP的启动流程


APP的启动可以分为两个阶段,即main()执行之前和main()执行之后。总结如下:

t(App 总启动时间) = t1(main()之前的加载时间 ) + t2(main()之后的加载时间 )。

t1 = pre-main 系统的 dylib (动态链接库)和 App 可执行文件的加载时间;

t2 = main() 函数执行之后到AppDelegate类中的applicationDidFinishLaunching:withOptions:方法执行结束前这段时间。


1.pre-main阶段

对于pre-main阶段,Xcode9之后,Apple提供了一种测量方法,在 Xcode 中 Edit scheme -> Run -> Auguments 将环境变量DYLD_PRINT_STATISTICS 设为1 :

程序运行起来之后 log

如下图所示,包含 main 函数执行之前各项的加载时间,我们可以多次运行取一下平均值,苹果推荐这个时间应在 400ms 以内

2.main

CFAbsoluteTime StartTime;

int main(int argc, char * argv[]) {

    @autoreleasepool {

             StartTime = CFAbsoluteTimeGetCurrent();

              return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}}

extern CFAbsoluteTime StartTime;

...

// 在 applicationDidFinishLaunching:withOptions: 方法的最后统计

dispatch_async(dispatch_get_main_queue(), ^{

            NSLog(@"Launched in %f sec", CFAbsoluteTimeGetCurrent() - StartTime);

});

3. 优化的目标

由于每个App的情况有所不同,需要加载的数据量也有所不同,事实上我们无法使用一种统一的标准来衡量不同的App。苹果。

应该在400ms内完成main()函数之前的加载

整体过程耗时不能超过20秒,否则系统会kill掉进程,App启动失败

400ms内完成main()函数前的加载的建议值是怎样定出来的呢?其实我也没有太深究过这个问题,但是,当用户点击了一个App的图标时,iOS做动画到闪屏图出现的时长正好是这个数字,我想也许跟这个有关。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.启动时间 App的启动分为冷启动和热启动。如果启动时间过长,首先引起的用户体验直线下降,再者是可能会激发苹果的...
    Maggie的小蜗居阅读 1,719评论 0 4
  • 本文介绍App启动性能优化,共分五个部分: 第一部分App启动过程 第二部分pre-main阶段的过程和可优化项 ...
    小飞鱼_love阅读 16,915评论 1 69
  • 现在的网络都是4G了,用不了多久就会有5G,网络状况已经不是APP存在的瓶颈,想要APP有更好的体验,用户体验成为...
    喵洛阅读 535评论 0 5
  • 深入理解iOS App的启动过程 前言 启动时间是衡量应用品质的重要指标。 本文首先会从原理上出发,讲解iOS系统...
    大维ios阅读 973评论 0 5
  • 背景 一个项目做的时间长了,启动流程往往容易杂乱,库也用的越来越多,APP的启动时间也会慢慢变长。本次将针对iOS...
    酱油瓶2阅读 3,562评论 0 12