性能優(yōu)化策略-創(chuàng)新互聯(lián)

性能問題的處理流程

  • 發(fā)現(xiàn)/重現(xiàn)問題

    成都創(chuàng)新互聯(lián)公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元館陶做網(wǎng)站,已為上家服務(wù),為館陶各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
  • 利用工具剖析

  • 形成假設(shè)

  • 改進(jìn)代碼和設(shè)計(jì)

性能優(yōu)化策略

在以上的四個(gè)步驟中循環(huán)反復(fù),直到問題解決。

Profile!不要猜!

性能優(yōu)化的主要策略:

  • 不要做無用功:不要在啟動(dòng)時(shí)花幾百ms來做logging,不要為同樣的數(shù)據(jù)做多次查詢

  • 試圖重用:對(duì)于創(chuàng)建過程昂貴的對(duì)象,要重用而不是重新創(chuàng)建

    • Table View的cell

    • Date/Number的formatter

    • 正則表達(dá)式

    • SQLite語句

  • 使用更快的方式設(shè)計(jì)、編程:選擇正確的集合對(duì)象和算法來進(jìn)行編程、選擇適合的數(shù)據(jù)存儲(chǔ)格式(plist、SQLite)、優(yōu)化SQLite查詢語句

  • 事先做優(yōu)化

    • 對(duì)于昂貴的計(jì)算,要進(jìn)行事先計(jì)算。iCal中的重復(fù)事件,是預(yù)先計(jì)算出來的,并保存到數(shù)據(jù)庫中。

    • 事先計(jì)算并緩存一些對(duì)象,可能會(huì)占用大量的內(nèi)存。注意不要將這些對(duì)象聲明為static并常駐內(nèi)存。

  • 事后做優(yōu)化:異步加載、懶加載

  • 為伸縮性而做優(yōu)化:當(dāng)數(shù)據(jù)有10條、100條、1000條甚至更多的時(shí)候,應(yīng)用程序的性能不應(yīng)該對(duì)應(yīng)的呈數(shù)量級(jí)式的增長(zhǎng),否則無法使用。

說起來慚愧,我真的很少遇到性能問題。以前假設(shè)中的性能問題,很多是根本不存在的。事前計(jì)劃也杜絕了不了性能問題的產(chǎn)生,所以不如暫時(shí)忘記它吧。當(dāng)然對(duì)于一些常識(shí)性的提高性能的設(shè)計(jì),仍然是必須的。

二:iOS應(yīng)用啟動(dòng)速度優(yōu)化

很多app的開發(fā)者都不重視app的啟動(dòng)速度,這對(duì)于碎片化使用情景的用戶來說,簡(jiǎn)直是災(zāi)難。

iOS應(yīng)用的啟動(dòng)速度

應(yīng)用啟動(dòng)時(shí),會(huì)播放一個(gè)放大的動(dòng)畫。iPhone上是400ms,iPad上是500ms。最理想的啟動(dòng)速度是,在播放完動(dòng)畫后,用戶就可以使用。

如果應(yīng)用啟動(dòng)過慢,用戶就會(huì)放棄使用,甚至永遠(yuǎn)都不再回來。拋開代碼不談,如果抱著PC端游和單機(jī)游戲的思維,在游戲啟動(dòng)時(shí)強(qiáng)加公司Logo,啟動(dòng)動(dòng)畫,并且用戶不可跳過,也會(huì)使用戶的成功使用率大大降低。

iOS系統(tǒng)的“看門狗"

為了防止一個(gè)應(yīng)用占用過多的系統(tǒng)資源,開發(fā)iOS的蘋果工程師門設(shè)計(jì)了一個(gè)“看門狗”的機(jī)制。在不同的場(chǎng)景下,“看門狗”會(huì)監(jiān)測(cè)應(yīng)用的性能。如果超出了該場(chǎng)景所規(guī)定的運(yùn)行時(shí)間,“看門狗”就會(huì)強(qiáng)制終結(jié)這個(gè)應(yīng)用的進(jìn)程。開發(fā)者們?cè)赾rashlog里面,會(huì)看到諸如0x8badf00d這樣的錯(cuò)誤代碼(“看門狗”吃了壞的食物,它很不高興)。

場(chǎng)景“看門狗”超時(shí)時(shí)間
啟動(dòng)20秒
恢復(fù)運(yùn)行10秒
懸掛進(jìn)程10秒
退出應(yīng)用6秒
后臺(tái)運(yùn)行10分鐘

值得注意的是,Xcode在Debug的時(shí)候,會(huì)禁止“看門狗”。

如何測(cè)試啟動(dòng)時(shí)間

兩種方法:一種使用NSLog,另外一種使用Time Profiler。

  • 使用NSLog

 1 CFAbsoluteTime StartTime; 2 int main(int argc, char **argv) { 3      StartTime = CFAbsoluteTimeGetCurrent(); 4      // ... 5 } 6  7 - (void)applicationDidFinishLaunching:(UIApplication *)app { 8      dispatch_async(dispatch_get_main_queue(), ^{ 9         NSLog(@"Launched in %f sec", CFAbsoluteTimeGetCurrent() - StartTime);10      });11      // ...12  }
  • 使用Time Profiler

    • Instruments->Time Profiler

    • Profile你的app

    • 切換到CPU strategy view,找到你的app啟動(dòng)的第一幀

    • 搜索-[UIApplication _reportAppLaunchFinished]

    • 找到包含-[UIApplication _reportAppLaunchFinished]的最后一幀,即可計(jì)算出啟動(dòng)時(shí)間

iOS App啟動(dòng)過程

  • 鏈接并加載Framework和static lib

  • UIKit初始化

  • 應(yīng)用程序callback

  • 第一個(gè)Core Animation transaction

鏈接并加載Framework及static lib時(shí)需要注意:

  • 每個(gè)Framework都會(huì)增加啟動(dòng)時(shí)間和占用的內(nèi)存

  • 不必要的Framework,不要鏈接

  • 必要的Framework,不要票房為Optional

  • 只在使用在Deployment Target之后發(fā)布的Framework時(shí),才使用Optional(比如你的Deployment Target是iOS 3.0,需要鏈接StoreKit的時(shí)候)

  • 避免創(chuàng)建全局的C++對(duì)象

初始化UIKit時(shí)需要注意:

  • 字體、狀態(tài)欄、user defaults、main nib會(huì)被初始化

  • 保持main nib盡可能的小

  • User defaults本質(zhì)上是一個(gè)plist文件,保存的數(shù)據(jù)是同時(shí)被反序列化的,不要在user defaults里面保存圖片等大數(shù)據(jù)

應(yīng)用程序的回調(diào):

  • application:willFinishLaunchingWithOptions:

  • 恢復(fù)應(yīng)用程序的狀態(tài)

  • application:didFinishLaunchingWithOptions:

我一直認(rèn)為設(shè)計(jì)的本質(zhì)是折衷。當(dāng)你為了100ms的啟動(dòng)速度優(yōu)化歡欣不已,而無視那長(zhǎng)達(dá)10秒的啟動(dòng)動(dòng)畫時(shí),應(yīng)該想想究竟什么是應(yīng)該做的。做正確的事情比把事情做好更重要。

三:事件處理-拯救主線程

用戶經(jīng)常評(píng)論app的一個(gè)用詞是“卡頓”,很大的因素是因?yàn)橹骶€程被占用了。用戶的事件

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁名稱:性能優(yōu)化策略-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://www.muchs.cn/article38/cdecpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、做網(wǎng)站網(wǎng)站策劃、定制網(wǎng)站、全網(wǎng)營(yíng)銷推廣、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)