什么是优化资讯,优化资讯系统哪家好?

营销圈公众号引导关注

作为APP的开发者,APP的启动优化对于我们来说就是一个永无止境的过程。在追求APP启动的更快的道路上,实现了一次又一次的突破,而且启动优化也是所有优化中比较重要的一项。其实在APP优化过程中,少不了要借助工具进行性能进行监测,我使用的是友盟+U-APM这款性能监测工具,它还具有云真机的优势,是一站式的产品,使用起来非常方便。本篇文章我将为大家探索IOS APP启动优化的那些事儿。

通常我们在做优化的时候会将优化以main()函数为界分为2个部分,即main之前的pre-main阶段 和 main()之后。这里我们就具体的看下:

启动性能检测main()之前

在APP启动到main函数执行的这个阶段,是由dyld来操作的,即_dyld_start->dyldbootstrap::start()->dyld::_main()

->dyld::initializeMainExecutable()->ImageLoader->ImageLoaderMachO->

libSystem_initializer()->libdispatch_init()->_objc_init()->

_dyld_objc_notify_register()->map_images->load_images->main() 的大致流程。而且这个阶段我们也无法介入,所在这里只能借助dyld的一些配置参数来获取一些信息。这里我们通过一个DYLD_PRINT_STATISTICS配置来获取pre-main阶段的耗时统计。

在Edit Schemes -> Run -> Arguments -> Environment Variables中添加配置:

什么是优化资讯,优化资讯系统哪家好?

配置完成之后,运行我们的程序(冷启动),然后看控制台输出:

Total pre-main time: 5.8 seconds (100.0%)

dylib loading time: 169.23 milliseconds (2.9%)

rebase/binding time: 312.46 milliseconds (5.3%)

ObjC setup time: 229.00 milliseconds (3.9%)

initializer time: 5.1 seconds (87.7%)

slowest intializers :

libSystem.B.dylib : 6.01 milliseconds (0.1%)

TestAPP : 5.0 seconds (85.9%) 主程序耗时

这里可以看到,输出了在pre-main阶段的总的耗时数,同时列举出了每个环节的具体耗时情况,以及最耗时操作项。接下来,对每一项做一个简单的介绍和一些优化建议:

dylib loading time: 动态库加载耗时(169.23ms)。关于动态库的加载,这个是不可避免的,我们能做的就是减少动态库的引用,官方的建议的是动态库的使用应该在6个以内,所以这里就引入了一个动态库合并的概念(后面的文章会详细介绍),通过合并动态库,从而减少在pre-main时的加载时间。

rebase/binding: 偏移修正/符号绑定。这个过程由操作系统完成。(ASLR安全机制,在二进制文件头部添加随机值)/

ObjC setup: OC类注册。这也就意味着项目中OC类越多,这里消耗的时间也就会增加。

initializer: 这个阶段指的是+ (void)load,C++构造函数等初始化操作。 这里可以看到用时5.1 seconds,是所有项做高的。这里是因为我在项目里面随便的一个类里实现了+(void)load函数,并模拟了一个耗时操作。所以这里的优化比较明确:

能不使用+load就尽量不要使用,可以将load内部逻辑推迟到initialize时;

使用到了load,就尽量不要在内部执行耗时操作;

如果混编了C++代码,要尽量减少构造函数中的耗时操作slowest intializers: 启动时用时最慢的文件,这个可以看到耗时最多的是TestAPP项目本身,这里主要是由于那个模拟的耗时操作导致。

启动性能检测main()之后

在main()函数之后的优化就因项目不同而异了,大致有这么几个核心:

业务逻辑:这里主要指APP从启动到首页呈现的阶段。尽量减少与该阶段无关且没有必要的初始化代码操作,把这部分代码以懒加载的方式处理。

删除无用代码:这里是随着业务的发展,APP不断的迭代更新,会产生很多的的下架业务,从而堆积了很多的无用代码,这些代码会增加ObjC setup的耗时,所以要清理掉。

多线程操作:在启动时,将一些必要的非UI业务且需要初始化操作的任务放在子线程中,这样可以在APP启动的时候,发挥CPU的最大性能。

启动页面:首要呈现的画面,尽量减少使用 .xib 或storyBoard来实现,因为它们需要解析成代码,会造成耗时。

业务具体优化:提升代码质量,采用最合理的实现方式等。

以上就是比较常规的优化方案了,还有就是大家在寻找APP问题的时候可以借助友盟+U-APM这款工具,对APP进行性能监测,友盟+U-APM通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析等性能能力,支持多场景、多通道智能告警监控,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。

好了,这篇文章的内容营销圈就和大家分享到这里,如果大家对网络推广引流和网络创业项目感兴趣,可以添加微信:Sum8338 备注:营销圈引流学习,我拉你进直播课程学习群,每周135晚上都是有实战的推广引流技术和网络创业项目课程分享,当然是免费学!

版权声明:本站部分文章来源互联网用户自发投稿,主要目的在于分享信息,版权归原作者所有,不承担相关法律责任。如有侵权请联系我们反馈邮箱yingxiaoo@foxmail.com,我们将在7个工作日内进行处理,如若转载,请注明本文地址:https://www.yingxiaoo.com/104204.html