正文
测试的方法就采用 iOS 10 提供的新的环境变量
DYLD_PRINT_STATISTICS
输出的app启动时间。Xcode的版本是8.1,测试设备是iphone 6。cocoapod版本1.1。
注意,测试过程发现每次获得的时间统计都不一致,所以我这里的数据可能和你自己测试得到的不同
,但是我认为这种偏差不影响定性。
基准线:空的OC项目 VS 空的Swift项目
创建两个没有任何业务逻辑的空的项目。
纯OC项目的启动时间
纯swift空项目的启动时间
大概有10毫秒的差异。这个差距考虑到测量的偏差可以认为两者几乎是一致的。
但是有时会出现swift加载忽然提高到400ms的情况。这是因为系统的动态framework只会加载一份。假设10个app启动都用到了UIKit,系统内部也只加载了一份UIKit。所以有时swift项目启动的时候刚好用到了系统framework没有缓存,就会显得的长一点。
6个framework
现在我们对比有代码的情况。两个项目分别加入5个依赖。
这是OC项目的6个依赖:
pod 'AFNetworking', '~> 3.0'
pod 'Masonry'
pod 'MJRefresh'
pod 'SDWebImage'
pod 'MBProgressHUD'
pod 'IQKeyboardManager'
这是swift项目的6个依赖,为了模拟真实生产中依然使用一些OC库的情况,将3个库换成了swift编码的,保留了3个OC库:
pod 'Alamofire'
pod 'SnapKit'
pod 'MJRefresh'
pod 'Kingfisher'
pod 'MBProgressHUD'
pod 'IQKeyboardManager'
OC的启动时间在70-100ms左右。这里取快的情况的数据:
OC6个依赖的启动时间
swift项目在第一次安装时的启动时间在dylib会多100ms,不知为何。swift项目在已经安装后运行打开的成绩:
swift6个依赖
列一个横向对比图:
结论