app性能优化

作者: 聪莞 | 来源:发表于2019-04-15 14:38 被阅读5次

    app启动

    app启动分为两种:冷启动和热启动(冷启动就是App被重新打开,热启动就是从后台到前台,启动优化主要是针对冷启动的)
    app启动时间分为两部分:main函数执行前(pre-main)、main函数至启动完成(main)

    添加环境变量查看main函数启动时间
    添加环境变量:DYLD_PRINT_STATISTICS,设置value为1(也可以通过设置DYLD_PRINT_STATISTICS_DETAILS为1获得系统在调用main 函数之前主要工作占用的时间信息.)

    image.png
    image.png

    冷启动主要包含以下几个阶段:

    1. dyld加载:加载动态库。加载完成后会通知runtime进行下一步操作;
    2. runtime初始化:在分析Category、load、initialize的加载原理中有分析过runtime的加载流程:map_images开始加载所有的方法、协议、分类、然后load_images去调用所有的load方法,当所有的可执行文件和所有的符号(IMP/SEL/Class/Protocol/Category等)都已经按照runtime的格式加载完毕后,开始调用main函数;
    3. 调用main函数,然后去调用UIApplicationMain,再到AppDelegate的didFinishLanchingWithOptions:方法

    文章推荐:
    iOS Dynamic Framework 对App启动时间影响实测

    优化步骤:

    1. 减少动态库,合并动态库(动态库定期清理);
    2. 合并一些类,减少Objc类、分类的数量,减少SEL的数量;
    3. 耗时操作不要放在didFinishLanchingWithOptions:中

    内存检测

    MLeaksFinder:运行app,当离开视图页面时,如果该页面视图控制图/其中的视图存在内存泄漏时,会弹出「Memory Leak」警告框,展示存在内存泄漏问题的相关视图控制器/视图堆栈信息:
    下载地址: https://github.com/Zepo/MLeaksFinder

    IPA瘦身

    LinkMap:可以查看每一个类在打包后的大小,按需进行优化
    下载地址:https://github.com/huanxsd/LinkMap
    使用方法就不做介绍了,很简单。效果如下:

    image.png

    图片压缩
    https://tinypng.com

    LSUnusedResources:检测未使用到的一些资源文件
    下载地址:https://github.com/tinymind/LSUnusedResources
    使用方法同样很简单,可以自己定义一些过滤条件,具体可以跑一个看看。效果如下:

    image.png

    卡顿处理

    一些基础的卡顿处理,如tableview的cell优化、高度缓存、frame提前计算等等就不做具体的介绍了。
    FPS卡顿检测:判断当前UI帧率
    基本原理就是利用一个CADisplayLink定时器进行计数,1s执行的次数就是当前的帧率
    下载地址:https://github.com/wsl2ls/WSL_FPS
    运行效果如下:

    image.png

    YYKit异步渲染:YYAsyncLayer
    渲染就是把我们代码里设置的代码的视图和数据结合,最后绘制成一张图呈现在用户的面前。每秒绘制60张图,用户看着就是流畅的,如果不到60帧,那么越少用户看着就会越卡。
    引用一个别人写的对YYAsyncLayer的源码分析:YYAsyncLayer 源码剖析:异步绘制

    相关文章

      网友评论

        本文标题:app性能优化

        本文链接:https://www.haomeiwen.com/subject/ksojwqtx.html