Tag: App Launch Time

减少应用启动时间

你好,世界!!! 这是我的第一个故事。 我想分享一下我在优化应用启动时间方面的经验。 当我开始时,我想到的第一个问题是 App launch time 多少? 答案是,完成应用程序启动序列所花费的时间称为应用程序启动时间。 (我很确定,通过该链接并了解应用启动顺序将花费一些时间) 最简单的答案是,在您的代码(在application(_:didFinishLaunchingWithOptions:)内部application(_:didFinishLaunchingWithOptions:) )开始运行之前,启动应用程序所花费的时间称为应用程序的启动时间 下一个问题是,如何衡量应用程序的启动时间? 苹果公司已经考虑了这个问题,并保留让开发人员对其进行评估的条件。 它有两个步骤。 首先是: 切换到释放模式(参见图1)。 您需要添加名称为DYLD_PRINT_STATISTICS且值为1环境变量(请参DYLD_PRINT_STATISTICS 2)。 现在,启动应用程序时,您可以在控制台部分的顶部看到日志。 有两种启动方式。 冷启动和热启动。 通常,冷 启动更重要。 衡量冷启动更重要的原因是用户重启手机后启动应用程序,或者很长时间以来第一次启动应用程序,这才是您真正希望它能立即启动的原因。 热启动是一种应用程序,其中的应用程序已经在内存中,这是因为它已经被启动并已退出,并且仍然位于内核中 因此,当我检查冷启动时,观察到以下内容: 主时间总计:675.22毫秒 dylib加载时间:535.96毫秒 重新设置/绑定时间:50.58毫秒 ObjC建立时间:35.27毫秒 其他初始化:X毫秒 苹果表示,应用程序启动时间应在400毫秒左右。 显然,这超出了预期。 我们可以看到加载dylib占用了最大的部分。 这是加载依赖关系所花费的时间,我现在可以在我的项目中看到30个pod和依赖关系。 问题是如何减少此dylib的加载时间? 第一步是避免使用库,但是随着开发的进行,库的数量开始增加。 因此,采用预防性方法,请尝试使用具有快速代码的库(考虑到您的项目处于快速状态)。 其次,对于所有库,请进行构建设置>> Mach-O Type并将其值设置为static library (请参见图3)。 当您将其设置为static library 文件在构建时链接。 代码被复制到可执行文件中。 程序中未引用的库中的代码将被删除。 仅具有静态库的程序在运行时没有任何依赖性。 这是更改后我的应用程序的日志: 主时间总计:430.53毫秒 dylib加载时间:333.09毫秒 重新设置/绑定时间:26.39毫秒 ObjC建立时间:20.72毫秒 […]