發現/重現問題
成都創新互聯公司2013年成立,是專業互聯網技術服務公司,擁有項目網站制作、成都網站制作網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元館陶做網站,已為上家服務,為館陶各地企業和個人服務,聯系電話:13518219792利用工具剖析
形成假設
改進代碼和設計
在以上的四個步驟中循環反復,直到問題解決。
性能優化的主要策略:
不要做無用功:不要在啟動時花幾百ms來做logging,不要為同樣的數據做多次查詢
試圖重用:對于創建過程昂貴的對象,要重用而不是重新創建
Table View的cell
Date/Number的formatter
正則表達式
SQLite語句
使用更快的方式設計、編程:選擇正確的集合對象和算法來進行編程、選擇適合的數據存儲格式(plist、SQLite)、優化SQLite查詢語句
事先做優化
對于昂貴的計算,要進行事先計算。iCal中的重復事件,是預先計算出來的,并保存到數據庫中。
事先計算并緩存一些對象,可能會占用大量的內存。注意不要將這些對象聲明為static并常駐內存。
事后做優化:異步加載、懶加載
為伸縮性而做優化:當數據有10條、100條、1000條甚至更多的時候,應用程序的性能不應該對應的呈數量級式的增長,否則無法使用。
說起來慚愧,我真的很少遇到性能問題。以前假設中的性能問題,很多是根本不存在的。事前計劃也杜絕了不了性能問題的產生,所以不如暫時忘記它吧。當然對于一些常識性的提高性能的設計,仍然是必須的。
很多app的開發者都不重視app的啟動速度,這對于碎片化使用情景的用戶來說,簡直是災難。
應用啟動時,會播放一個放大的動畫。iPhone上是400ms,iPad上是500ms。最理想的啟動速度是,在播放完動畫后,用戶就可以使用。
如果應用啟動過慢,用戶就會放棄使用,甚至永遠都不再回來。拋開代碼不談,如果抱著PC端游和單機游戲的思維,在游戲啟動時強加公司Logo,啟動動畫,并且用戶不可跳過,也會使用戶的成功使用率大大降低。
為了防止一個應用占用過多的系統資源,開發iOS的蘋果工程師門設計了一個“看門狗”的機制。在不同的場景下,“看門狗”會監測應用的性能。如果超出了該場景所規定的運行時間,“看門狗”就會強制終結這個應用的進程。開發者們在crashlog里面,會看到諸如0x8badf00d
這樣的錯誤代碼(“看門狗”吃了壞的食物,它很不高興)。
場景 | “看門狗”超時時間 |
---|---|
啟動 | 20秒 |
恢復運行 | 10秒 |
懸掛進程 | 10秒 |
退出應用 | 6秒 |
后臺運行 | 10分鐘 |
值得注意的是,Xcode在Debug的時候,會禁止“看門狗”。
兩種方法:一種使用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啟動的第一幀
搜索-[UIApplication _reportAppLaunchFinished]
找到包含-[UIApplication _reportAppLaunchFinished]
的最后一幀,即可計算出啟動時間
鏈接并加載Framework和static lib
UIKit初始化
應用程序callback
第一個Core Animation transaction
鏈接并加載Framework及static lib時需要注意:
每個Framework都會增加啟動時間和占用的內存
不必要的Framework,不要鏈接
必要的Framework,不要票房為Optional
只在使用在Deployment Target之后發布的Framework時,才使用Optional(比如你的Deployment Target是iOS 3.0,需要鏈接StoreKit的時候)
避免創建全局的C++對象
初始化UIKit時需要注意:
字體、狀態欄、user defaults、main nib會被初始化
保持main nib盡可能的小
User defaults本質上是一個plist文件,保存的數據是同時被反序列化的,不要在user defaults里面保存圖片等大數據
應用程序的回調:
application:willFinishLaunchingWithOptions:
恢復應用程序的狀態
application:didFinishLaunchingWithOptions:
我一直認為設計的本質是折衷。當你為了100ms的啟動速度優化歡欣不已,而無視那長達10秒的啟動動畫時,應該想想究竟什么是應該做的。做正確的事情比把事情做好更重要。
用戶經常評論app的一個用詞是“卡頓”,很大的因素是因為主線程被占用了。用戶的事件
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網頁名稱:性能優化策略-創新互聯
網站地址:http://vcdvsql.cn/article38/cdecpp.html
成都網站建設公司_創新互聯,為您提供云服務器、做網站、網站策劃、定制網站、全網營銷推廣、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯