dyld2 & dyld3

观看https://developer.apple.com/videos/play/wwdc2017/413/ 记录

在 iOS 13 之前,所有的第三方 App 都是通过 dyld 2 来启动 App 的,主要过程如下:

  • 解析 Mach-O 的 Header 和 Load Commands,找到其依赖的库,并递归找到所有依赖的库
  • 加载 Mach-O 文件
  • 进行符号查找
  • 绑定和变基
  • 运行初始化程序

上面的所有过程都发生在 App 启动时,包含了大量的计算和I/O,所以苹果开发团队为了加快启动速度,在 WWDC2017 - 413 - App Startup Time: Past, Present, and Future[4] 上正式提出了 dyld3。

dyld3 被分为了三个组件:

(1)本进程外的Mach-O分析器/编译器

  • 预先处理了所有可能影响启动速度的 search path、@rpaths 和环境变量
  • 然后分析 Mach-O 的 Header 和依赖,并完成了所有符号查找的工作
  • 最后将这些结果创建成了一个启动闭包
  • 这是一个普通的 daemon 进程,可以使用通常的测试架构

(2)本进程内执行”lauch closure“的引擎

  • 验证启动闭包的安全性,然后映射到 dylib 之中,再跳转到 main 函数
  • 不再需要解析 Mach-O 的 Header 和依赖,也不需要符号查找。

(3)一个启动闭包缓存服务

  • 系统 App 的启动闭包被构建在一个 Shared Cache 中, 我们甚至不需要打开一个单独的文件

  • 对于第三方的 App,我们会在 App 安装或者升级的时候构建这个启动闭包。

  • 在 iOS、tvOS、watchOS中,这一切都是 App 启动之前完成的。在 macOS 上,由于有 Side Load App,进程内引擎会在首次启动的时候启动一个 daemon 进程,之后就可以使用启动闭包启动了。

dyld 3 把很多耗时的查找、计算和 I/O 的事前都预先处理好了,这使得启动速度有了很大的提升。

dyld2 dyld3相关推荐

  1. app启动页数秒加载 代码_iOS 底层探索 - 应用加载

    一.前导知识 以下参考自 WWDC 2016 Optimizing App Startup Time : 1.1 Mach-O Mach-O is a bunch of file types for ...

  2. iOS之性能优化·优化App的启动速度

    抛砖引玉 启动是 App 给用户的第一印象,启动越慢用户流失的概率就越高,良好的启动速度是用户体验不可缺少的一环. 苹果是一家特别注重用户体验的公司,过去几年一直在优化 App 的启动时间,特别是去年 ...

  3. iOS之深入解析Xcode 13正式版发布的40个新特性

    一.前言 Xcode 13 包括适用于 iOS 15.iPadOS 15.tvOS 15.watchOS 8 和 macOS Big Sur 11.3 的 SDK. Xcode 13 Release ...

  4. wpf 加载page后启动_App启动之Dyld在做什么

    App启动之Dyld在做什么 前言 这里主要剖析一下一个App从点击图标,到展现首页的整个过程. App是如何启动的 按顺序划分 加载可执行文件(读取Mach-O) 加载动态库(Dylib) Reba ...

  5. 深入理解iOS App的启动过程

    前言 启动时间是衡量应用品质的重要指标. 本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main函数之前和main函数之后两个角度去分析如何优化启动时间. 准备知识 Mach-O 哪 ...

  6. 深入理解iOS APP启动过程

    前言 启动时间是衡量应用品质的重要指标. 本文首先会从原理上出发,讲解iOS系统是如何启动App的,然后从main函数之前和main函数之后两个角度去分析如何优化启动时间. 准备知识 Mach-O 哪 ...

  7. iOS应用的启动流程和优化详解

    一.应用启动流程 1.整体过程 (1)解析Info.plist 加载相关信息,例如如闪屏 沙箱建立.权限检查 (2)Mach-O(可执行文件)加载 dylib loading time(动态库耗时) ...

  8. ios启动时间优化--理论

    启动时间是衡量应用品质的重要指标. 本文首先会从原理上出发,讲解iOS系统是如何启动APP的,然后从main函数之前和main函数之后俩个角度去分析如何优化启动时间. mach-O 哪些名词指的是Ma ...

  9. 老司机 iOS 周报 #22 | 2018-06-04

    老司机 iOS 周报,只为你呈现有价值的信息. 你也可以为这个项目出一份力,如果发现有价值的信息.文章.工具等可以到 Issues 里提给我们,我们会尽快处理.记得写上推荐的理由哦.有建议和意见也欢迎 ...

最新文章

  1. 编程以外积累: 如何给项目生成类似VS2008的说明文档
  2. Entity Framework的启动速度优化
  3. 计算机科学概论各章总结,计算机科学概论(原书第5版)读书笔记
  4. 反射动态创建对象_Json为例
  5. 智能驾驶系统是怎样看懂交通标志的?3张流程图给你讲明白
  6. vs2005中的aspnetdb(转)
  7. 【问题记录】python 函数 传入一个对象返回一个对象值得注意
  8. eclipse 与my eclipse区别,IDE
  9. Atitit java js groupby 分组操作法
  10. 《微波工程》阅读杂记一
  11. 2010计算机一级选择题,计算机一级考试选择题题库(2010年最新版)
  12. 使用谷歌浏览器下载的图片webp怎么转成jpg格式图片
  13. Win10笔记本电脑设置插入鼠标时自动禁用触摸板
  14. 四则运算生成程序(基于控制台)
  15. C++线程编程-内存顺序
  16. 360与QQ大战,网友昨晚热论看大片
  17. Iphone8 plus系统照片为什么电脑打不开 打开heic文件教程
  18. 从平民到帝皇——给企业主的启示
  19. Beautiful Soup:4 kinds of objects
  20. 用速腾RS16跑LeGO-LOAM

热门文章

  1. b和B的区别?以及b、B、KB、MB、TB、PB、EB的换算
  2. make问题:make[1] entering directory
  3. AD10软件导入CAD图纸尺寸
  4. [Swift]LeetCode1104. 二叉树寻路 | Path In Zigzag Labelled Binary Tree
  5. YOLO&Deepsort的车速&车流量检测系统(源码&部署教程)
  6. 激光雷达赛道“白刃战”?硅光芯片级FMCW技术进入量产周期
  7. APICloud开发之新手上路!自定义Loader编译后安装包解析出错。
  8. rust 调用 java_自从尝了 Rust,Java 突然不香了
  9. 【Python】unicode编码和bytes编码不能混用
  10. 「深度」比天气还热的无人超市,是真有料还是在玩模式?