iOS 开发高手课
戴铭
前滴滴出行技术专家
42934 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
用户故事 (1讲)
iOS 开发高手课
15
15
1.0x
00:00/00:00
登录|注册

02 | App 启动速度怎么做优化与监控?

非首屏其他业务服务模块的初始化
首页的业务代码执行
初始化
Objc运行时的初始处理
加载可执行文件和动态链接库
实现一个方法耗时检查工具
粗细两方面的优化
启动速度优化的重要性
记录和展示方法调用的层级关系和顺序
hook objc_msgSend 方法
监控手段
优化对资源的操作
检查首屏渲染完成前主线程上的耗时方法
从main() 函数执行后这个阶段下手
优化思路
首屏渲染完成后
main() 函数执行后
main() 函数执行前
主线程上的耗时问题
冷启动和热启动
启动速度影响用户体验和获取用户数量
开始自己的iOS开发知识体系构建之路
戴铭在专栏中梳理了iOS开发知识体系框架图
课后作业
小结
如何做一个方法级别启动耗时检查工具来辅助分析和监控
方法级别的启动优化
功能级别的启动优化
App启动阶段的工作
App启动时的工作
与App启动速度相关的重要性
戴铭介绍
启动速度是门面,如何做到极致优化?
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是戴铭。
我已经在专栏的第一篇文章中,和你梳理了一份 iOS 开发的知识体系框架图。今天,我们就正式从基础出发,开始自己的 iOS 开发知识体系构建之路吧。接下来,我就先和你聊聊与 App 启动速度密切相关的那些事儿。希望你听我说完启动速度的事儿之后,在专栏里的学习状态也能够快速地启动起来。
在文章开始前,我们先设想这么一个场景:假设你在排队结账时,掏出手机打开 App 甲准备扫码支付,结果半天进不去,后面排队的人给你压力够大吧。然后,你又打开 App 乙,秒进,支付完成。试想一下,以后再支付时你会选择哪个 App 呢。
不难想象,在提供的功能和服务相似的情况下,一款 App 的启动速度,不单单是用户体验的事情,往往还决定了它能否获取更多的用户。这就好像陌生人第一次碰面,第一感觉往往决定了他们接下来是否会继续交往。
由此可见,启动速度的优化必然就是 App 开发过程中,不可或缺的一个环节。接下来,我就先和你一起分析下 App 在启动时都做了哪些事儿。

App 启动时都干了些什么事儿?

一般情况下,App 的启动分为冷启动和热启动。
冷启动是指, App 点击启动前,它的进程不在系统里,需要系统新创建一个进程分配给它启动的情况。这是一次完整的启动过程。
热启动是指 ,App 在冷启动后用户将 App 退后台,在 App 的进程还在系统里的情况下,用户重新启动进入 App 的过程,这个过程做的事情非常少。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了优化iOS应用程序启动速度的方法,重点关注了冷启动阶段的优化策略。作者提出了一系列针对性的优化建议,包括减少动态库加载、控制C++全局变量的数量等方法来提升启动速度。此外,建议将非首屏业务的初始化、监听注册、配置文件读取等操作放到首屏渲染完成后进行,以避免影响首屏渲染速度。文章还强调了功能级别的启动优化,规范代码,避免功能堆积、无规范、难维护的问题。作者还提到了对启动方法耗时进行全面、精确检查的手段,包括定时抓取主线程上的方法调用堆栈和hook objc_msgSend方法。总的来说,本文通过深入分析App启动阶段的工作内容,提出了一些实用的优化建议,有助于开发者更好地优化iOS应用程序的启动速度。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《iOS 开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(277)

  • 最新
  • 精选
  • Glenn•D
    置顶
    模拟器上试了一下耗时检查没有效果

    作者回复: 需要真机,arm64芯片,模拟器是 x86

    2019-03-15
    3
  • 好多余先生丶
    置顶
    完了,上来就懵逼

    作者回复: 可以从作业入手,学习不能着急,需要慢慢来,多重复就会有更多体会

    2019-03-14
    3
    117
  • Neo
    置顶
    不错 提纲挈领 希望汇编那块能稍微细讲一下 没有太多写汇编的经验

    作者回复: 汇编语言入门可以看阮一峰老师的《汇编语言入门教程》啊。链接是 http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html 。以后可以考虑写个 iOS 视角的

    2019-03-14
    28
  • 西京富贵兔
    看完这篇我膨胀了,我都敢去点 objc_msgSend 源码文件了,嗯,不出意料,一句没看懂。。。

    作者回复: 哈哈

    2019-03-14
    2
    33
  • 星空
    友情提示:想要尝试SMCallTrace的朋友,需要在SMCallTrace.m中打开第54行的注释。

    作者回复: 赞

    2019-03-14
    30
  • 只有C和OC基础,学起来很吃力

    作者回复: 想要一个东西就去买,喜欢一个人就去追,哪怕最后那个东西没有用,那个人没有跟你在一起,都没有关系,人生苦短,要知道遗憾要比失败可怕的多。

    2019-03-14
    2
    20
  • 冰风落叶
    大佬们 这是我的写的总结和课后作业 不知道写的对不对 恳请各位大佬指正 总结:https://www.jianshu.com/p/f26c4f16692a 课后作业:https://github.com/308823810/BSMonitorTimeTool

    作者回复: 赞

    2019-04-04
    3
    19
  • 说swift没有main函数那位,其实swift是有main函数的,只不过苹果把它精简成了一个@NSApplicationMain了而已,不信去你的AppDelegate.swift最上面看!

    作者回复: 赞

    2019-03-14
    19
  • Justin
    戴老师:多个动态库进行合并,具体怎么合并了,没弄过动态库合并该功能

    作者回复: https://blog.automatic.com/how-we-cut-our-ios-apps-launch-time-in-half-with-this-one-cool-trick-7aca2011e2ea 了解下

    2019-03-15
    5
    17
  • Kam
    这个方法耗时计算的工具很赞,白天要花点时间实践一下才行。 有个让我疑惑的地方是关于“热启动”的概念,我再去看了下 WWDC 上的说法,里面提到热启动应该也包括“启动后退出 App 再启动”这种情况,不知道我下面这段话的理解是否正确: “And a warm launch is an app where the application is already in memory, either because it's been launched and quit previously, and it's still sitting in the discache in the kernel, or because you just copied it over.” - https://developer.apple.com/videos/play/wwdc2016-406/?time=1484

    作者回复: 官方的解释很全面,情况都说清楚了

    2019-03-14
    2
    14
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部