减少应用启动时间
你好,世界!!!
这是我的第一个故事。 我想分享一下我在优化应用启动时间方面的经验。
当我开始时,我想到的第一个问题是 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毫秒
其他初始化:X毫秒
欢呼!!! 我设法将应用启动时间缩短了44%。