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

2020-10-17 15:40:05 蜻蜓队长

绿洲iOS研发工程师,绿洲ID:收纳箱KeepFit。

目录

  1. 《我是如何让微博绿洲的启动速度提升30%的》
  2. 《我是如何让微博绿洲的启动速度提升30%的(二)》
  3. 《懒人版二进制重排》

0. 序言

启动是App给用户的第一印象,对用户体验至关重要。试想一个App需要启动5s以上,你还想用它么?

最初的工程肯定是没有这些问题的,但随着业务需求不断丰富,代码越来越多。如果放任不管的话,启动时间会不断上涨,最后让人无法接受。

本文从优化原理出发,介绍了我是如何通过修改库的类型和Clang插桩找到启动所需符号,然后修改编译参数完成二进制文件的重新排布提升应用的启动速度的。

下面我们先上结论:

  • 优化前:

    Total pre-main time: 1.2 seconds (100.0%)
             dylib loading time: 567.72 milliseconds (45.5%)
            rebase/binding time: 105.14 milliseconds (8.4%)
                ObjC setup time:  40.01 milliseconds (3.2%)
               initializer time: 532.47 milliseconds (42.7%)
               slowest intializers :
                 libSystem.B.dylib :   4.70 milliseconds (0.3%)
              libglInterpose.dylib : 295.89 milliseconds (23.7%)
                      AFNetworking :  48.75 milliseconds (3.9%)
                             Oasis : 285.94 milliseconds (22.9%)
    复制代码
  • 优化后

    Total pre-main time: 822.34 milliseconds (100.0%)
             dylib loading time: 196.71 milliseconds (23.9%)
            rebase/binding time: 104.95 milliseconds (12.7%)
                ObjC setup time:  31.14 milliseconds (3.7%)
               initializer time: 489.53 milliseconds (59.5%)
               slowest intializers :
                 libSystem.B.dylib :   4.65 milliseconds (0.5%)
              libglInterpose.dylib : 230.19 milliseconds (27.9%)
                      AFNetworking :  41.60 milliseconds (5.0%)
                             Oasis : 335.84 milliseconds (40.8%)
    复制代码

通过staticlib优化二进制重排两项技术,我成功将绿洲的pre-main时间从1.2s降到了大约0.82s,提升了大约31.6%

两台手机都是iPhone 11 Pro,右边是优化后的效果。(原谅我右边点开还慢了一点

以上内容来自于网络,如有侵权联系即删除
相关文章

上一篇: 带你了解多线程

下一篇: 我的(FE) iTerm2 配置

在线咨询
客户经理