zoukankan      html  css  js  c++  java
  • App启动过慢,有哪些因素?

    首先,需要清楚App的启动过程

    1、解析 Info.plist

    ·加载相关信息,例如闪屏

    ·沙箱建立、权限检查

    2、Mach-O加载

    ·如果是胖二进制文件,寻找适合当前CPU类别的部分

    ·加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)

    ·定位内部、外部指针引用,例如字符串、函数等

    ·执行声明为__attribute__(constructor)的C函数

    ·加载类扩展(category)中的方法

    ·C++静态对象加载、调用OC的+load函数

    3、程序执行

    ·调用main()函数

    ·调用UIApplicationMain()函数

      1)创建UIApplicationDelegate对象

      2)创建UIApplicationDelegate对象并复制

      3)读取配置文件Info.plist,设置程序启动的一些属性

      4)创建应用程序的Main Runloop循环

    ·调用applicationWillFinishLaunching

      1)程序启动成功之后,首先调用Application:didFinishLaunchingWithOptions:方法,如果Info.plist文件中配置了启动storyboard文件名,则加载storyboard文件。如果没有配置,则根据代码来创建UIWindow-->UIWindow的rootViewController-->显示

     

    然后,影响启动性能的因素有:

    1、main()函数之前耗时的影响因素

    ·动态库加载越多,启动越慢

    ·OC类越多,启动越慢

    ·C的constructor函数越多,启动越慢

    ·C++静态对象越多,启动越慢

    ·OC的+load越多,启动越慢

    2、main()函数之后耗时的影响因素

    ·执行main()函数的耗时

    ·执行applicationWillFinishLaunching的耗时

    ·rootViewController及其childViewController的加载、view及其subviews的加载

    借鉴方案:

    针对今日头条这个App我们可以优化的点如下:

    ·纯代码方法而不是storyboard加载首页UI

    ·对didFinishLaunching里面的函数考虑是否可以延迟加载或者懒加载,需要与各个业务方共同check,对于一些已经下线的业务,删除冗余代码

    ·对于一些与UI展示无关的业务,如微博认证过期检查、图片最大缓存空间设置等做延迟加载。对实现了+load()方法的类进行分析,尽量将load里的代码延后调用

    ·上面统计数据显示展示feed的导航控制器页面(NewsListViewController)比较耗时,对于viewDidLoad以及viewWillAppear方法中尽量去尝试少做、晚做、不做。

     

  • 相关阅读:
    如何把.ipynb文件转化为.py文件?
    本地浏览器连接服务器端jupyter notebook服务
    本地浏览器下远程连接jupter notebook服务器
    ubuntu下如何设置环境变量
    ubuntu环境变量的设置
    ssh免密登录设置方法
    主机之间ssh免密码登录
    ubuntu与windows互传文件的3种方法
    ubuntu16.04安装Sogou输入法详细步骤
    Ubuntu下安装Sogou输入法
  • 原文地址:https://www.cnblogs.com/cchHers/p/14973341.html
Copyright © 2011-2022 走看看