同程APP启动过程时长统计及优化方案:
APP启动到首页加载完:1.64s - 1.74s
一、AppDelegate各阶段时长统计
表1:
| 启动过程 | 耗时 | 优化方案 | 备注 |
|---|---|---|---|
| replaceLaunchImage | 80-105ms之间 | 延后执行 | 启动只执行一次 |
| bugly初始化 | 5-8ms左右 | 可忽略 | |
| beeHive初始化 | 2-3ms左右 | 可忽略 | |
| 通用模块初始化 | 140- 180ms之间 | 具体参考表2 | |
| APP首页创建 | 343 - 400ms之间 | @张友凯 @陈冬 | |
| 微信初始化 | 3 - 28ms | 延后执行 |
表2:
| 过程 | 耗时 | 优化方案 | 备注 |
|---|---|---|---|
| 设置最优域名&gateway | 34ms左右 | 延后操作 | @郭东洋 |
| trace配置 | 12-15ms | 延后操作 | @郭东洋 |
| hybrid环境配置 | 40-70ms | 延后操作 | @朱尧才 确认 @郭东洋 修改 |
| 注册音频后台服务 | 5ms | 延后操作 | @郭东洋 |
| 读取广告符 | 5ms | 延后操作 | @郭东洋 |
| 页面加载耗时监听 | 11ms | 延后操作 | @朱尧才 @郭东洋 |
| 动态化库初始化 | 30-40ms | 是否可以异步线程执行 | @陈冬确认 |
| 动态更新配置DUCOnfig | 8 - 10ms左右 | 暂不处理 | 热修复逻辑需要靠前 |
| 其他 | 都小于3ms | 可忽略 |
二、首页加载时长统计
1、IndexContainerViewController
| 过程 | 耗时 | 优化方案 | 备注 |
|---|---|---|---|
| viewDidLoad(needFirstLoad) | 193ms左右 | @张友凯 @陈冬 | |
| viewWillAppear | 小于1ms | 忽略 | |
| viewDidAppear | 小于1ms | 忽略 |
2、IndexMainViewController
| 过程 | 耗时 | 优化方案 | 备注 |
|---|---|---|---|
| loadView | 80 - 100 ms | @张友凯 @陈冬 | |
| loadDefaultData | 60 - 80 ms | @张友凯 @陈冬 | |
| createBaseView | 14ms左右 | @张友凯 @陈冬 | |
| viewDidLoad | 80 - 85ms | @张友凯 @陈冬 | |
| viewWillAppear | 13ms左右 | @张友凯 @陈冬 | |
| viewDidAppear | 不到1ms | 忽略 |
Load方法耗时统计
主工程
| 类/分类 | 优化方案 | 备注 |
|---|---|---|
| TCTCacheManager+TCTDeviceIdCompatible | 可以删除@郭东洋 | 已和@方爱林确认 |
| TCTFileStorageObject | 可以删除@郭东洋 | 已和@方爱林确认 |
| TCTLoadManage | 放到initialize处理 | @郭东洋 |
| TCTWidgetBridgeOC | 修改调用方式 | @方爱林 确认 |
| TCTURLNotificationHandler | 修改初始化注册方式 | @郭东洋 修改 |
| TCTURLRouteSupport | 首页加载完成后初始化 | @郭东洋 修改 |
| TCTRequestAlertCustomView | 首页加载完成后初始化 | @郭东洋 修改 |
| UIViewController(TCTTrendUseURL) | 可以删除 | 未做任何处理 @方爱林 @郭东洋确认 |
| TCTTrendImageDownloadRelyObject | 暂不处理 | 影响较大 @方爱林 |
| TCTRequestObject(TCTNetGateway) | 暂不处理 | 影响较大,处理网关 |
| UIViewController(PO_RouteURL) | 暂不处理 | 兼容路由表注册,不能删除 |
私有组件
| 组件 | 类/分类 | 优化方案 | 备注 |
|---|---|---|---|
| TCTMixtureProject | TCTImagePickerManager+TCTTopShadow | 放到initialize处理 | @方爱林 |
| TCTQRHistory | TCTQRScanViewController+QRHistory | 放到initialize处理 | @方爱林 |
| TCTViewLoadTimeDetect | UIViewController+LoadTimeDetect | 去掉组件 | kTCTViewLoadDetectNotification暂无处理 @朱尧才 |
| WelcomeViewController | WelcomeViewController | 放到initialize处理 | 业务逻辑 @Tracy-jun |
| TCTMore | SettingViewController+CacheClear | 放到initialize处理 | @方爱林 |
| eLongFramework | NSDate+Helper | 暂不处理 | 影响较大 |
| eLongFramework | NSDate+DateTools | 暂不处理 | 影响较大 |
| TCTAnalyics | UIViewController+TCTUMSAgent | 暂不处理 | 页面数据埋点 |
| TCTBehaviorTrackCore | TCTUMSAgent+BehaviorTrack | 暂不处理 | hybrid监控 |
| TCTBehaviorTrackCore | TCTBehaviorTrackHybridBridge | 暂不处理 | hybrid监控 |
| TCTCategory | UITableView+FDIndexPathHeightCache | 暂不处理 | 影响较大 |
| TCTCategory | UIViewController+TCTExtendedLayout | 暂不处理 | 影响较大 @方爱林 |
| TCTHTTPDNS | SDWebImageConvertHTTPS | 暂不处理 | 支持https @方爱林 |
| TCTMore | UNUserNotificationCenter+TCTHack | 暂不处理 | 修复crash |
| TCTNavHookPop | UINavigationController+HookPop | 暂不处理 | 影响较大 |
| TCTNavigationBar | UINavigationBar+TCTTransparent | 暂不处理 | 影响较大 |
| TCTNavigationBar | UIViewController+TCTNavigationBarTransparent | 暂不处理 | 影响较大 |
| TCTravelUICategory | UINavigationItem+_Swizzle | 暂不处理 | 修改导航条按钮颜色影响较大 |
| TCTrend | UIViewController+ClientCostTimeLog | 暂不处理 | 统计页面耗时 |
| TCTUIDeviceIdentifier | UIDeviceHardware+swizzle | 暂不处理 | 影响较大 |
| TCTURLRoute | NSURL+URLWithStringEncode | 暂不处理 | 影响较大 |
| TCTURLRoute3 | UIViewController+TCTBridgeWeb | 暂不处理 | 影响较大 |
第三方
暂不处理
| 组件 | 类/分类 |
|---|---|
| AnimatedGIFImageSerialization | AnimatedGIFImageSerialization |
| BSBacktraceLogger | BSBacktraceLogger |
| React | RCTBridgeModule |
| TTTAttributedLabel | TTTAttributedLabel |
| UITextView+Placeholder | UITextView+Placeholder |