启动优化的再次探索

阶段一

启动优化的指标是尽量缩短应用启动的时间(用户等待时间减少,增加体验)。业界这方面做的比较出色的如支付宝等,基本达到“秒起”。
关于启动优化的文章网上有很多了,这边只是简单的提下,不做详细阐述。

启动优化一般指的是冷启动,其中分为三个阶段:

  • main()之前
  • main()
  • main()之后

其中main()之前阶段以dyld主导,涉及到耗时的部分主要有

  1. 加载动态库
  2. rebase
  3. binding
  4. load
  5. ...

有兴趣的可以参考我之前写的一篇文章谈谈dyld ,更为详细的内容可以参考WWDC2013 Session

阶段二

对于一般的app,做完阶段一之后,其实差不多了,也没必要再次优化。但是对于一些超级app来说指标越来越高,那么还有哪些优化措施可以再次缩短启动时间呢?

二进制文件重排

二进制文件重排本质是减少缺页中断次数,从而减少部分启动时间。缺页中断指的是当进程访问一个虚拟内存Page而对应的物理内存却不存在时,触发内核分配物理内存,有需要的话会从磁盘mmap读入数据的行为。



通过App Store渠道分发的App,Page Fault还会进行签名验证,所以一次Page Fault的耗时比想象的要多:

默认布局

编译器在生成二进制文件的时候,默认按照链接.o文件顺序写文件,以目标文件内部的函数顺序写函数。

默认

简化问题: 假设我们只有两个page: page1/page2,其中绿色的method1和method3启动时候需要调用,为了执行对应的代码,系统必须进行两个Page Fault。

但如果我们把method1和method3排布到一起,那么只需要一个Page Fault即可,这就是二进制文件重排的核心原理 。

重排

其中二进制文件重排关键是得到order file

Alters the order in which functions and data are laid out. For each section in the output file, any symbol in that section that are specified in the order file file is moved to the start of its section and laid out in the same order as in the order file file.

App 二进制文件重排已经被玩坏了已经讲解的很详细了,原理:基于clang内置的代码覆盖工具,做到全局的AOP,在 SanitizerCoverage 的回调函数里将地址先收集到队列里,调用 AppOrderFiles()后会停止收集,并将队列中的 PC 地址依次翻译符号,最后去重
这样就得到了order file. 在xcode build settings中设置order file选项之后,重新build生成的应用较上次未优化前减少了15%左右.

阶段三

一开始没想到还有这种骚套路,直到我今天看到了支付宝分享的一篇文章支付宝客户端架构解析:iOS 客户端启动性能优化初探。通过使用Background Fetch来做到"热启动"。Background Fetch本来是做后台数据刷新用的。它其实类似于一种轮询机制,系统会学习并且适应用户的习惯,在用户使用之前,后台进行调度来启动应用,更新数据。不过也有其弊端,比如进程唤醒的次数远大于使用的次数等

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容