说一下 App 启动过慢,你可能想到的因素有哪些?

发布于 2022-09-20 23:33:30
关注者
0
被浏览
20
5 个回答
  • 匿名网友
    匿名网友 2022-09-20
    1、App 启动过程 解析 Info.plist 加载相关信息,例如如闪屏 沙箱建立、权限检查 Mach-O 加载 如果是胖二进制文件,寻找合适当前 CPU 类别的部分 加载所有依赖的 Mach-O 文件(递归调用 Mach-O 加载的方法) 定位内部、外部指针引用,例如字符串、函数等 执行声明为 attribute((constructor))的 C 函数 加载类扩展(Category)中的方法 C++ 静态对象加载、调用 ObjC 的 +load 函数程序执行,调用 main() 调用 UIApplicationMain() 调用 applicationWillFinishLaunching 2、影响启动性能的因素 main()函数之前耗时的影响因素 动态库加载越多,启动越慢。 ObjC 类越多,启动越慢 C 的 constructor 函数越多,启动越慢 C++静态对象越多,启动越慢 ObjC 的+load 越多,启动越慢。main()函数之后耗时的影响因素,执行 main()函数的耗时执行 applicationWillFinishLaunching 的耗时 rootViewController 及其 childViewController 的加载、view 及其 subviews 的加载 另外参考一下今日头条的启动优化方案: 针对于今日头条这个 App 我们可以优化的点如下: 纯代码方式而不是 storyboard 加载首页 UI。 对 didFinishLaunching 里的函数考虑能否挖掘可以延迟加载或者懒加载,需要与各个业务方 pm 和 rd 共同 check 对于一些已经下线的业务,删减冗余代码。 对于一些与 UI 展示无关的业务,如微博认证过期检查、图片最大缓存空间设置等做延迟加载。 对实现了+load()方法的类进行分析,尽量将 load 里的代码延后调用。 上面统计数据显示展示 feed 的导航控制器页面(NewsListViewController)比较耗时,对于 viewDidLoad 以及 viewWillAppear 方法中尽量去尝试少做,晚做,不做。
  • 匿名网友
    匿名网友 2022-09-20
    手机使用的过程中出现了卡顿的情况,可以进行以下排查: 1、后台开启较多应用程序,导致手机运行卡顿,建议用腾讯手机管家"一键清理"程序; 2、使用第三方软件程序导致兼容性问题,或下载安装较多第三方软件,建议卸载软件或更换软件下载来源体验; 3、读取手机存储的文件过大导致手机卡顿,建议在文件管理清理文件,释放存储空间;定期的清理缓存,养成关闭后台程序的习惯等; 4、手机系统出现卡顿,建议重刷手机固件版本改善,或更新到最新版本。
  • 匿名网友
    匿名网友 2022-09-20
    class太多 static太多 load方法太多 耗时 didapplication finish launch方法里面有耗时的方法 rootvc页面层级太复杂 或者启动阶段 初始化阶段有耗时的文件读写
  • 匿名网友
    匿名网友 2022-09-20
    因为耦合高,创建了活多无用的类实例; 等待高耗时操作,比如网络请求; 加载了过多可以后期再加载的库;
  • 匿名网友
    匿名网友 2022-09-20
    排除手机问题 那就剩下启动时候加载/请求过多呗
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看