iOS 性能优化之业务性能监控

业务性能监控, 在人工的在业务的开始和结束处打点上报,然后后台统计达到监控目的,

是性能优化里比较重要的一个维度。具体来说就是测试方法操作执行的时间损耗,可能是同步

也可能是异步的。测试的方法大概有如下五种:

第一种: NSDate 精确度可能是微秒(μs)

NSDate* tmpStartData = [NSDate date];
//You code here...
double deltaTime = [[NSDate date] timeIntervalSinceDate:tmpStartData];
NSLog(@"cost time = %f s", deltaTime);

第二种:clock_t 精确度可能是微秒(μs)

 clock_t start = clock();
// dosomething
 clock_t end = clock();
 NSLog(@"时间损耗 %f s", (double)(end - start)/CLOCKS_PER_SEC); 

第三种:CFAbsoluteTime 精确度可能是微秒(μs)

CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
//You code here...
CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
NSLog(@"cost time = %f s", end - start); //s 

第四种:CFTimeInterval 精确度纳秒(ns)

CFTimeInterval start = CACurrentMediaTime();
// dosomething
CFTimeInterval end = CACurrentMediaTime();
NSLog(@"时间损耗 = %f s", end - start); 

第五种:mach_absolute_time 精确度纳秒(ns)

  uint64_t start = mach_absolute_time ();
  // operation();
  uint64_t end = mach_absolute_time ();
  uint64_t elapsed = 1e-9 *(end - start); 

以上五种方法,实际可用的是最后两种,这五种都有什么关系呢?

NSDate -> gettimeofday  -> mach_absolute_time

也就是说最终的来源还是 mach_absolute_time, gettimeofday 加入的时间同步机制。

CSDN:http://blog.csdn.net/skymingst/article/details/41892445

mach_absolute_time 详解

http://southpeak.github.io/blog/2014/09/23/xing-neng-yu-shi-jian/

clock_t 是不可靠的

http://www.cnblogs.com/chenyadong/archive/2011/12/03/2274783.html

附录:

mach_absolute_time 比较严格些的时间检测方法见示例代码,中间参考了官方QA样例

特点:

1. 增加了Block形式支持 --不推荐使用 T_T

2. 支持单元测试标题输出

3. 支持同步、异步测试

4. 纳秒级精确度,默认是毫秒输出,精确度微秒

https://github.com/skyming/iOS-Performance-Optimization

首发:

http://skyming.me/2016/05/08/iOS-Performance-Optimization-Time-md/

时间: 2024-08-12 05:09:34

iOS 性能优化之业务性能监控的相关文章

性能优化——Web前端性能优化

核心知识点: 1.排查网站性能瓶颈的手法:分析各个环节的日志,找出异常部分 2.Web前端:网站业务逻辑之前的部分(浏览器.图片服务.CDN) 3.优化手段 1)浏览器优化 (1)减少http请求 a.http请求的开销:建立通信链路.进行数据传输.,同时要启动独立的线程去处理. b.减少http的手段:合并CSS.合并JavaScript,合并图片,这样浏览器就只有一次请求. (2)使用浏览器缓存 a.将静态资源缓存到客户浏览器上, b.更新时是生成新的JavaScript文件,并更改html

Android App性能优化笔记之一:性能优化是什么及为什么?

By Long Luo 周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住这个时机,迅速开发出产品,成为至关重要的一环.相对传统互联网时代的PC产品,用户对移动端产品的容忍度更低.而一款移动应用在推出的时候可能只是接近完成的状态,这就需要通过快速的迭代开发来更新产品,不断完善产品来留住用户.同时,通过更新产品也能唤醒一些沉默用户,让一些原本下载了应用但使用次数非常少的用户给该应用多一次

Android app 性能优化的思考--性能卡顿不好的原因在哪?

说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才感觉运行速度稍微提高了点,就算手机在各种性能跑分软件面前分数遥遥领先,还是感觉无论有多大的内存空间都远远不够用.相信每个使用 Android 系统的用户都有过以上类似经历,确实,Android 系统在流畅性方面不如 IOS 系统,为何呢,明明在看手机硬件配置上时,Android 设备都不会输于 IO

性能优化指南:性能优化的一般性原则与方法

作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统.本文从以下几个方面来思考这个问题:性能优化的一般性原则,性能优化的层次,性能优化的通用方法.本文不限于任何语言.框架,不过可能会用Python语言来举例. 不过囿于个人经验,可能更多的是从Linux服务端的角度来思考这些问题. 本文地址:http://www.cnblogs.com/xybaby/p/9055734.html 一般性原则 依据数据而不是凭空猜测 这是性能优化的第一

前端性能优化:jquery性能优化

jQuery是前端最常用的一个js框架,其实有部分操作也是可以改进的.大部分情况下,封装的后性能是会降低的,如果发现很影响,就可以改为原生的. 另外使用jQuery需要注意一下几点来提高性能: 1不使用each, jQuery 的each循环比原生的for循环性能相差几十倍. 前端性能优化:循环优化 2尽量使用ID,类型,类选择器,避免使用属性选择器 尽量使用ID,类,类型选择器,避免属性选择器.ID,类,类型都有原生的方法,属性选择器需要遍历整个DOM,还需要读取每个节点的属性进行判断,性能很

蚂蚁金服架构师带你深入性能优化一MySql性能优化实战

概要: Mysql的优化,大体可以分为三部分:索引的优化,sql语句的优化,表的优化.本文主要帮助自己整理思路,也可作为一个学习MySQL优化的提纲. 索引的优化 只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引 尽量使用短索引,如果可以,应该制定一个前缀长度 对于经常在where子句使用的列,最好设置索引,这样会加快查找速度 对于有多个列where或者order by子句的,应该建立复合索引 对于like语句,以%或者'-'开头的不会使用索

ios 性能优化之CPU性能调优

分析CPU使用在您的应用程序 来源:http://www.cnblogs.com/chensheng12330/p/3947585.html 确保有效地使用所有可用资源为应用程序编写代码时是非常重要的.其中最重要的是你的CPU资源. 有效地使用cpu允许应用程序运行得更快和更有效的. 即使你将编写应用程序特定的平台,记住,即使是同一类型可以有不同的CPU功能的通用平台. CPU跟踪模板为您提供的方法来确定你的应用程序如何使用多个核心,你使用多少能源和其他资源的测量. 寻找瓶颈与性能监视器计数器

JavaScript性能优化:度量、监控与可视化1

HTTP事务所需要的步骤: 接下来,浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接,类似对讲机的Over(完毕) Roger(明白) TCP/IP模型 TCP即传输控制协议(Transmission Con-trol Protocol) 一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求 远程服务器找到资源并使用HTTP响应返回该资源,常用的有: •200表示来自服务器的成功响应: •404意味着服务器没有找到请求的资源:•500表示执行请

前端性能优化----yahoo前端性能团队总结的35条黄金定律

网页内容 减少http请求次数 80%的响应时间花在下载网页内容(images, stylesheets, javascripts, scripts, flash等).减少请求次数是缩短响应时间的关键!可以通过简化页面设计来减少请求次数,但页面内容较多可以采用以下技巧. 1. 捆绑文件: 现在有很多现成的库可以帮你将多个脚本文件捆绑成一个文件,将多个样式表文件捆绑成一个文件,以此来减少文件的下载次数.例如在asp.net中可以使用ScriptManager,asp.net MVC中的Bundli