黑幕背后的性能優(yōu)化之業(yè)務性能監(jiān)控


我相信很多人都在說,iOS行業(yè)不好了,iOS現(xiàn)在行情越來越難了,失業(yè)的人比找工作的人還要多。失業(yè)即相當于轉行,跳槽即相當于降低自己的身價。那么做iOS開發(fā)的你,你是否在時刻準備著跳槽或者轉行了。

關于iOS 性能優(yōu)化梳理:
基本工具、業(yè)務優(yōu)化、內存優(yōu)化、卡頓優(yōu)化、布局優(yōu)化、電量優(yōu)化、 安裝包瘦身、啟動優(yōu)化、網(wǎng)絡優(yōu)化等

基本工具:
TODO: Instruments 高級技巧、常見的優(yōu)化技能

業(yè)務性能監(jiān)控, 在人工的在業(yè)務的開始和結束處打點上報,然后后臺統(tǒng)計達到監(jiān)控目的,是性能優(yōu)化里比較重要的一個維度。具體來說就是測試方法操作執(zhí)行的時間損耗,可能是同步

也可能是異步的。測試的方法大概有如下五種:

第一種: 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 加入的時間同步機制。

簡單說下NSDate 、CFAbsoluteTimeGetCurrent、CACurrentMediaTime 的區(qū)別

框架層:

NSDate 屬于Foundation

CFAbsoluteTimeGetCurrent() 屬于 CoreFoundatio

CACurrentMediaTime() 屬于 QuartzCore

本質區(qū)別:

NSDate 或 CFAbsoluteTimeGetCurrent() 返回的時鐘時間將會會網(wǎng)絡時間同步,從時鐘 偏移量的角度,mach_absolute_time() 和 CACurre[圖片上傳中...(image.png-c2fc24-1546591771268-0)]
ntMediaTime() 是基于內建時鐘的,能夠更精確更原子化地測量,并且不會因為外部時間變化而變化(例如時區(qū)變化、夏時制、秒突變等),但它和系統(tǒng)的uptime有關,系統(tǒng)重啟后CACurrentMediaTime()會被重置。
常見用法:

NSDate、CFAbsoluteTimeGetCurrent()常用于日常時間、時間戳的表示,與服務器之間的數(shù)據(jù)交互

其中 CFAbsoluteTimeGetCurrent() 相當于[[NSDate data] timeIntervalSinceReferenceDate];

CACurrentMediaTime() 常用于測試代碼的效率

在嚴峻的iOS市場中競爭, 沒有掌握和了解一些具有優(yōu)勢的技術性知識,你怎么與別人進行PK,又怎么征服你的面試官。做過三五年的也未必一定會涉足到里面的技術性知識。在找工作中,技術足了,找不到工作也許你缺少的是一份總結和一份面試題去練習。為大家總結一份名企面試資料和面試題:


小編給大家推薦一個iOS技術交流群:691040931群內提供數(shù)據(jù)結構與算法、底層進階、swift、逆向、底層面試題整合文檔等免費資料!
喜歡曉雯就關注曉雯喲??!曉雯微信:Pingwen20

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 轉自:iOS關于時間的處理 做App避免不了要和時間打交道,關于時間的處理,里面有不少門道,遠不是一行API調用,...
    咖啡綠茶1991閱讀 733評論 0 0
  • 做App避免不了要和時間打交道,關于時間的處理,里面有不少門道,遠不是一行API調用,獲取當前系統(tǒng)時間這么簡單。我...
    MrPeak閱讀 4,715評論 0 42
  • 關鍵時刻,第一時間送達! 問題種類 時間復雜度 在集合里數(shù)據(jù)量小的情況下時間復雜度對于性能的影響看起來微乎其微。但...
    C9090閱讀 1,023評論 0 1
  • 前言 在iOS開發(fā)過程中,經(jīng)常會和時間打交道。例如用戶在一個頁面停留的時間、兩個方法哪個執(zhí)行更快等等。之前對于這部...
    WQ_UESTC閱讀 3,557評論 0 12
  • 問題種類 時間復雜度 在集合里數(shù)據(jù)量小的情況下時間復雜度對于性能的影響看起來微乎其微。但如果某個開發(fā)的功能是一個公...
    星光社的戴銘閱讀 30,003評論 15 282

友情鏈接更多精彩內容