A00LaunchMeasure 0.1.3

A00LaunchMeasure 0.1.3

HDBaseProject 维护。



  • 作者:

  • denglibing5

A00LaunchMeasure

CI Status Version License Platform

示例

要运行示例项目,请先克隆仓库,然后从 Example 目录中运行 pod install

要求

安装

A00LaunchMeasure 通过 CocoaPods 可用。要安装它,只需将以下行添加到 Podfile 中

pod 'A00LaunchMeasure'

作者

邓力兵5,[email protected]

许可协议

A00LaunchMeasure 是在 MIT 许可证下可供使用。请参阅 LICENSE 文件以获取更多信息。

1、比较体系化的文章(指南)

系统地整理了启动阶段、原理、方案、工具等要点

过去一段时间的iOS启动优化文章目录

iOS应用启动性能优化资料

2、各个大公司启动优化文章(增长见识及学习新的方案)

从背景到问题发现,优化过程,然后到原理,再到如何预防监控说明,比较系统地讲述了整个过程。其中也包含了比较多新知识(例如后台激活、启动后任务管理TTI、火焰图)。细节倒不是很详细

快手 iOS 启动优化实践

抖音品质建设 - iOS启动优化《原理篇》

抖音品质建设 - iOS启动优化《原理篇》 - 掘金

抖音品质建设 - iOS启动优化《实战篇》

抖音品质建设 - iOS启动优化《实战篇》 - 掘金

3、二进制重排相关文章:(技术细节)

从动态库改为静态库、二进制重排两个方向进行优化

我是如何让微博绿洲的启动速度提升30%的 - 掘金

详细介绍二进制重排方案

iOS App启动优化(一):检测启动时间 - 掘金

使用Pods能力来支持二进制重排,同时支持Pods中的其他动态库

懒人版二进制重排 - 掘金

4、Load方法耗时统计文章(技术细节)

计算 +load 方法的耗时,靠谱,已经在使用:

详细的介绍如何检测load方法的耗时,技术方案全面靠谱,也有方案的选型细节和原因,非常好

兼容category的load方法,使用runtime(method_exchangeImplementations)交换load实现然后进行耗时埋点

https://triplecc.github.io/2019/05/27/计算load耗时/

https://github.com/tripleCC/Laboratory/tree/master/HookLoadMethods/A4LoadMeasure

5、自动检测启动时刻OC方法耗时(工具使用)

可视化工具,检测post-main的耗时,自动生成火焰图

Messier - 简单易用的Objective-C方法跟踪工具

目前不支持iOS15的机器,崩溃的原因应该和 fishhook 差不多。

fishhook解决方案:https://github.com/facebook/fishhook/pull/87/files

trace.json

下载上面的 trace.json 文件,拖入到 chrome://tracing/ 可以看到效果

img

Total load time: 596.920967 ms
            HDLoadFrameworkObj(HDLoad00) load time: 301.328063 ms
             HDLoadFrameworkObj(HDLoad0) load time: 201.607943 ms
                        HDViewController load time: 51.537037 ms
                        messier_injector load time: 14.590979 ms
                HDViewController(HDLoad) load time: 11.595964 ms
                      HDLoadFrameworkObj load time: 11.392951 ms
                       A00CppInitMeasure load time: 4.301071 ms
                           HDAppDelegate load time: 0.566959 ms

					Total initializer time: 47.639012 ms
_GLOBAL__sub_I_TestStaticClassMemberMutex.cpp : 0.042081 ms
           HDInitializerTest_Initializer : 41.468979 ms
          HDInitializerTest_Initializer2 : 0.349045 ms
          _GLOBAL__sub_I_TestRectZero.mm : 0.023961 ms
            _GLOBAL__sub_I_TestVarVar.mm : 0.001907 ms
             _GLOBAL__sub_I_TestMacro.mm : 5.074024 ms
            _GLOBAL__sub_I_TestCBlock.mm : 0.002980 ms
             _GLOBAL__sub_I_TestClass.mm : 0.676036 ms

							Total post main time: 536.512167 ms
                   asycTasks-TTLoginTask load time: 377.533173 ms
                    asycTasks-TTDoneTask load time: 316.752350 ms
       afterLaunchAsycTasks-TTRenderTask load time: 316.671448 ms
              asycTasks-TTCompletionTask load time: 315.872375 ms
                 asycTasks-TTPrepareTask load time: 315.784119 ms
     afterLaunchMainTasks-TTDownloadTask load time: 312.958099 ms
                    mainTasks-TTPearTask load time: 212.643372 ms
                 mainTasks-TTObserveTask load time: 211.551453 ms
                asycTasks-TTPrefetchTask load time: 114.505920 ms
                   mainTasks-TTAppleTask load time: 111.962204 ms
                 asycTasks-TTProcessTask load time: 11.648625 ms
                  mainTasks-HDLaunchDemo load time: 0.355125 ms