- 积分
- -32
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2017-10-31
- 精华
|
2#
发表于 2017-11-17 11:22:30
|
只看该作者
来自: LAN 来自 LAN
都说这个问题下没有干货,那我尽量用浅显的语言从技术角度回答一下(估计认真看完回答的不多)。
推荐有一定编程经验的人去看这个 WWDC 视频:App Startup Time: Past, Present, and Future - WWDC 2017 - Videos - Apple Developer
简单说,无论 iOS 还是 Android,App Startup Time(应用启动时间)都是由两部分组成的。其一是「系统打开应用的时间」,在这段时间里没有任何应用开发者的代码会被执行。其二是「应用的初始化时间」,一般来讲,只要你在屏幕上看到了动画效果,就已经进入了第二段时间了。
所以仔细想一下就会发现,操作系统其实只对第一段时间有影响,应用自己初始化要做什么系统是管不了的。哪怕同一款应用不同平台的版本,可能初始化要做的事情也是不一样的。这也是为什么别的答主说:「不同平台,不好比较」。
但是我们还是可以比较第一段时间。一个不太严谨的结论是:Android 和 iOS 的「加载效率」是差不多的,就算有差距,也应该是硬件性能导致的。然而,一般 iOS 应用在启动的时候要加载更多的东西,所以 iOS 最终应用打开的速度可能会慢一些。
在 iOS 里,应用的加载是由一个叫 dyld 的东西控制的。虽然在 iOS 11 里 dyld 有了很大的改进,但 Apple 将新的改进限制为「仅对 iOS 系统应用生效」,预计在 iOS 12 才会开放给第三方应用(因为这个改进比较特别,贸然开放给第三方应用可能会有安全性和稳定性隐患)。对比一下 iOS 11 系统应用和第三方应用的加载速度就可以看出来。这也是为什么视频里打开系统应用的时候,基本上都是 iOS 比 Android 快。
同时,如果一个应用太过复杂(或者程序员不懂/不在乎),例如用了很多 dynamic library(动态库),也会影响 dyld 加载这个应用的速度。虽然我没有实际数据,但是一般 iOS 应用会比 Android 应用有着更多的代码行数和使用更多的 dynamic library(更多不意味应用质量更高)。不幸的是,Apple 新的编程语言 Swift 的流行,也影响了 iOS 应用的启动时间。尽管理论上未来 Swift 会提高应用的加载速度,目前用了 Swift 的 iOS 应用加载速度反而会变得更慢,因为 Swift 暂时没有达到 ABI 稳定,目前也只支持 dynamic library 而不支持 static library。我不解释具体细节了,不过前者会在一年内解决,后者已经有了解决办法,只不过大多数 iOS 开发者还不知道。
PS:这个回答没有考虑墓碑机制和常驻内存唤醒的影响,假设应用都是第一次启动。
-
给自己的独立应用打一个广告(保证启动时间很快):Look 备忘录 2 on the App Store
给自己打的广告:我明年将在美国本科毕业,想在硅谷做些事情,欢迎联系我聊一下(我的简历)。 |
|