App性能优化方案

性能优化方案

1.启动时间

简介

点击App图标启动 -> main函数 -> AppDelegate -> 首页viewDidAppear 的时间
标准:最好控制在400毫秒之内git

计算方法

1.APP开始启动到系统调用main函数时间

Total pre-main time: 175.75 milliseconds (100.0%)
         dylib loading time:  40.17 milliseconds (22.8%)
        rebase/binding time:  24.04 milliseconds (13.6%)
            ObjC setup time:  25.48 milliseconds (14.4%)
           initializer time:  85.93 milliseconds (48.8%)
           slowest intializers :
             libSystem.B.dylib :   5.57 milliseconds (3.1%)
   libBacktraceRecording.dylib :   4.08 milliseconds (2.3%)
    libMainThreadChecker.dylib :  31.51 milliseconds (17.9%)
                   PassKitCore :   4.26 milliseconds (2.4%)
                    huhuWebapp :  31.77 milliseconds (18.0%)

通常说来,pre-main阶段的定义为APP开始启动到系统调用main函数这一段时间github

dylib loading time
  • 减小dylibs的引用
rebase/binding time
  • 减小Object C元数据量,减小Objc类数量,减小实例变量和函数
ObjC setup time
  • 核心思想同上,这部份内容基本上在上一阶段优化事后就不会太过耗时
initializer time
  • 使用initialize替代load方法
  • 不要在初始化中建立线程

2.main阶段

main阶段则表明从main函数入口到主UI框架的viewDidAppear函数调用的这一段时间shell

计算方法:性能优化

在main函数写入如下代码网络

NSLog(@"LaunchStartTime: %f", CACurrentMediaTime());

在首页viewDidAppear加入以下代码app

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
   NSLog(@"LaunchEndTime: %f", CACurrentMediaTime());
}

3.两个时间相加,大于400毫秒则启动较慢

==总耗时==:175.75+928 = 1103.75 s

2.界面帧率查看

1.下载FPSLabel

pod 'FPSLabel', '~> 1.0.1'

2.使用

在首页viewDidLoad加入如下代码框架

[FPSLabel installOnWindow:KWindow];

3.标准 60 FPS正常,低于60FPS为掉帧

3.CPU前台、后台占用查看

1.下载WMDebugAssistant

pod 'WMDebugAssistant' ,:git=>"https://github.com/roronoaxyz/WMDebugAssistant.git", :tag => '0.1.2'

2.使用

导入依赖函数

#import "WMAssistantBall.h"
@property (strong, nonatomic) WMAssistantBall *assistantBall;

在ViewDidLoad添加如下代码性能

- (void)viewDidLoad {
    [super viewDidLoad];
    self.assistantBall = [[WMAssistantBall alloc] init];//必定要做为一个局部属性
    self.assistantBall.addtionItems = @[@"暗门", @"接口数", @"网络", @"日志"];     //额外加一些按钮
    self.assistantBall.ballColor = [UIColor blueColor];       //按钮颜色
    self.assistantBall.shapeColor = [UIColor redColor];           //移动时的光圈颜色
    [self.assistantBall doWork];              //很重要 必定要调用
    //点击了某一个选项
    self.assistantBall.selectBlock = ^(NSString *title, UIButton *button) {
        NSLog(@"%@", title);
    };
}

3.前四个按钮分别表示

白色:@"CPU",
红色:@"内存", 
绿色:@"流量",
蓝色:@"FPS"

转载于:https://www.jianshu.com/p/4317d8b138f0优化