美文网首页
WWDC2019应用启动优化

WWDC2019应用启动优化

作者: 把大象放进冰箱 | 来源:发表于2020-07-13 11:19 被阅读0次

Apple开发者WWDC2019视频链接 

文是从Apple备忘录移来的,所以比较尴尬的是简书不支持表格

启动类型

冷启动

After phone reboot

App not in memory

No process exists

热启动

Recently terminated

App is partially in memory

No process exists

中断后重启

App is suspended

App is fully in memory

Process exists

App启动阶段

System interface -> Runtime init -> UIKit init -> Application init -> Initial Frame Render -> Extended 

System interface 优化

DYLD3 : 库加载

避免链接未使用的Frameworks

避免动态库加载,例如dlopen() 或 NSBundle中的 load()

硬链接所有的依赖项

libSystem Init : 初始化底层系统组件

Runtime Init优化

Static Runtime Initialization : 初始化语言环境,Objective-C 和 Swift

不建议静态初始化

如使用静态库初始化时应暴露Init API尽早初始化栈

必须使用静态初始化时将代码移出静态 +[Class load] 方法,因为该方法在App启动中总会被调用,好的方法是在类中第一次使用该方法的时候使用 +[Class initialize] 进行lazy初始化

UIKit Initialization优化

系统实例化UIApplication 和 UIApplicationDelegate

减少在UIApplication或UIApplicationDelegate中的代码和工作

Application Initialization优化

Lifecycle Callbacks

未使用UIScene

iOS 12 或更早

UIApplicationDelegate

application:willFinishLaunchingWithOptions:

application:didFinishLaunchingWithOptions:

UIApplicationDelegate

applicaitonWillEnterforegroud:

applicaitonDidBecomeActive:

使用UIScene

iOS 12 以后

UIApplicationDelegate

application:willFinishLaunchingWithOptions:

application:didFinishLaunchingWithOptions:

UISceneDelegate

scene:willConnectToSession:options:

sceneWillEnterforegroud:

sceneDidBecomeActive:

无论是否使用UIScene API,都应在didFinishLaunch和didBecomeActive中推迟非相关的功能代码加载

使用UIScene API,应在Scenes之间共享资源

First Frame Render优化

减少视图中的层次,使用lazy加载views

减少自动布局中的约束数量

Extended优化

使用异步数据加载并显示数据

界面在数据加载的同时应具有互动性和响应性

利用os_signpost API衡量和标记耗时

如何进行启动优化的评估

消除其他干扰,确保一致性评估,例如网络干扰、后台进程干扰等

重启设备,并将设备静置2-3分钟,这将清除任何不必要的状态干扰

打开飞行模式或在代码中标记网络依赖性来减少对网络的依赖

使用iCloud将使后台出现干扰,在测试评估过程中可以完全注销iCloud

使用Release Build版本的App进行测试评估,减少Debug对评估的影响并可以利用到编译时优化等技术

使用热启动进行评估和测试,这将更符合用户在平常使用时的情况

使用旧的设备和新的设备同时测试保证应用在新旧设备上都具有优异的性能

使用XCTest进行测试,xcode将自动执行重复的启动过程并收集信息

如何优化启动

最小化工作

推迟与第一帧无关的工作,例如预加载项等

避免主线程冲突,将耗时的网络操作或文件操作移出主线程

减少内存的分配和使用

优先工作

确保合适的服务质量QoS安排Task工作

正确的调度优先执行的程序

优化工作

限制启动时需要获取的数据量或Lazy加载所需的变量和结果

缓存资源或复杂功能

如何使用XCode Instruments帮助优化启动结果

使用Profile代替Run执行代码,Profile位置在Run的下拉菜单中,Profile将在发布模式下重新编译App

使用App launch来监控应用启动时的情况,在iOS 13和xCode 11中Instruments自带App launch应用

使用XCTest测试,XCTest相比Instruments不占用性能,测试的结果更加准确

技巧

os.log适用于apple全系列开发中的日志记录

XCTest是Apple自带的自动化测试框架

MetricKit可以用于收集和上传App的运行性能,它可以指定功耗和性能指标进行上传

相关文章

  • WWDC2019应用启动优化

    Apple开发者WWDC2019视频链接 文是从Apple备忘录移来的,所以比较尴尬的是简书不支持表格 启动类型 ...

  • android启动优化

    感谢原作者涉及:应用启动流程启动优化(闪屏页优化、MultiDex 优化、WebView启动优化、启动耗时分析方法)

  • 性能优化 - 启动时间

    应用的启动分为:冷启动,暖启动和热启动。其中冷启动是我们优化的重点,优化冷启动可能会同时优化暖启动和热启动。 冷启...

  • Android应用启动优化:一种DelayLoad的实现和原理

    0. 应用启动优化概述 在 Android 开发中,应用启动速度是一个非常重要的点,应用启动优化也是一个非常重要的...

  • 应用启动优化:一种DelayLoad的实现和原理(上篇)

    0. 应用启动优化概述 在 Android 开发中,应用启动速度是一个非常重要的点,应用启动优化也是一个非常重要的...

  • Android启动性能优化

    从两个方向优化应用的启动速度 视觉体验优化代码逻辑优化 应用程序启动有三种状态,每种状态都会影响应用程序对用户可见...

  • iOS 二进制重排

    iOS 应用启动优化 1.启动 1.1 冷启动 冷启动指的是第一次打开应用,或者打开很多其他应用后再打开该应用也可...

  • 经典面试题25 - 如何优化移动Android应用启动速度

    问题 如何优化移动Android应用启动速度? 解答 在讨论如何优化App启动速度之前,我们要清楚启动的分类: 冷...

  • 应用启动优化

    1.热启动 与 冷启动 冷启动 首次启动。 热启动 是已经启动,从后台再次唤醒。2.优化冷启动main()函数执...

  • 性能优化-应用启动时间

    性能优化-应用启动时间 设置环境变量 这里的应用启动时间指,应用启动到显示第一个页面展示时的时间。 应用启动有冷启...

网友评论

      本文标题:WWDC2019应用启动优化

      本文链接:https://www.haomeiwen.com/subject/gzcacktx.html