docs: WKWebView request hook && APM Wake Up

This commit is contained in:
liubinpeng
2021-05-28 10:03:50 +08:00
parent 0fa61f3513
commit 3d346dd596
12 changed files with 575 additions and 747 deletions

View File

@@ -1,15 +1,23 @@
# APM
# APM - Wake Up
## 启动时间的监控和治理
- https://everettjf.github.io/2018/08/24/most-simple-task-queue-model/
- https://github.com/izhangxb/GMTC/blob/master/全球移动技术大会GMTC%202017%20PPT/手淘iOS性能优化探索%20.pdf
- https://mp.weixin.qq.com/s/Kf3EbDIUuf0aWVT-UCEmbA
- http://yulingtianxia.com/blog/2016/10/30/Optimizing-App-Startup-Time/
- https://www.jianshu.com/p/c14987eee107
- https://time.geekbang.org/column/article/85331
- https://punmy.cn/2018/06/18/15278496835424.html
- https://www.shangmayuan.com/a/a14fb820d1bc4457b018bf7b.html
>
网传:如果在老设备上,使用最新的 iOS 系统苹果会自动降频CPU 频率),从而让你的 iPhone 看上去很卡,让你主动去购买新的设备。
> 我知道可以借助三方工具类BSBacktraceLogger获取主线程调用栈[BSBacktraceLogger bs_backtraceOfMainThread];然后定时0.01秒计算各方法的调用耗时。但是具体不知道该怎么计算啊,望老师指点!
作者回复: 连续相同的堆栈,将其时间相加就是那个堆栈方法的耗时。
其实,苹果在 iOS 13 的时候,在内核中加入了一个新的性能衡量指标`wakeup`。CPU 频率和设备电池有关系。看看 ARM 架构中对于 CPU 功耗问题的描述:
> Many ARM systems are mobile devices and powered by batteries. In such systems, optimization of power use, and total energy use, is a key design constraint. Programmers often spend significant amounts of time trying to save battery life in such systems.
由于ARM被大量使用于低功耗设备而这些设备往往会由电池来作为驱动所以 ARM 在硬件层面就对功耗这个问题进行了优化设计。
功耗可以分为2种类型即静态功耗与动态功耗。
静态功耗指的是只要 CPU 通上电,由于芯片无法保证绝对绝缘,所以会存在“漏电”的情况,而且越大的芯片这种问题越严重,这也是芯片厂家为什么拼命的研究更小尺寸芯片的原因。这部分功耗由于是硬件本身决定的,所以我们无法去控制,而这种类型功耗占比不大。
动态功耗指的是 CPU 运行期间,接通时钟后,执行指令所带来的额外开销,而这个开销会和时钟周期频率相关,频率越高,耗电量越大。这也就说明了苹果为什么会控制 CPU 使用率而相关研究Facebook 也做过也表明CPU 在20以下和20以上的能耗几乎是成倍的增加。
且苹果在具体哪个系统推出了 Battery Health 模块,其中有个 Maximum Capacity 的指标。用于判断电池的性能。苹果在这个开放出来之前,肯定已经在收集电池的健康状况。
iOS 11.3 及更高版本优化了性能管理功能,会定期评估所需的性能管理程度,以避免意外关机。如果电池健康能够满足系统所观察到的对峰值电源的要求,则系统会调低性能管理的程度。如果再次出现意外关机,则系统会调高性能管理的程度。这种评估是持续进行的,使得性能管理更能适应实际情况。
综上:当老设备运行新的 iOS 操作系统,系统会判断电池健康状态,如果电池不够健康,那么系统为了防止电池持续损坏(当 CPU 以较高频率工作,则会损坏电池设备,降低寿命),会自动降低 CPU 频率。其中这个有个判断标准,这个标准是不断变化的。