移動端關(guān)注的一些指標
運行多少小時不崩潰冻押;
多次打開頁面,控制崩潰率盛嘿;
界面優(yōu)化洛巢,如何才能讓用戶不急躁、不煩躁次兆;
服務(wù)器沒有返回數(shù)據(jù)狼渊,是否會導(dǎo)致奔潰;
網(wǎng)絡(luò)不好,數(shù)據(jù)來的太慢狈邑,界面是否不流暢城须;
從數(shù)據(jù)庫讀的數(shù)據(jù)太慢如何解決等。
網(wǎng)絡(luò)不好的情況處理:
移動端界面應(yīng)該有自己的邏輯米苹,需要網(wǎng)絡(luò)數(shù)據(jù)的地方糕伐,應(yīng)該有默認值,這樣在網(wǎng)絡(luò)數(shù)據(jù)沒有返回的情況下蘸嘶,讓用戶有數(shù)據(jù)可以看到良瞧。收到的網(wǎng)絡(luò)數(shù)據(jù)應(yīng)該是通過某種方式刷新到界面,而不是等到數(shù)據(jù)返回才刷新頁面训唱。當沒有網(wǎng)絡(luò)數(shù)據(jù)的時候褥蚯,界面應(yīng)該可以自成一體,走的通流程况增,不強依賴網(wǎng)絡(luò)數(shù)據(jù)赞庶。
在弱網(wǎng)模式下調(diào)試是我們必備的功力,因為我們要考慮用戶的實施環(huán)境通常都不會很好澳骤。把經(jīng)常使用的數(shù)據(jù)歧强,存到緩存,提高APP的運行效率为肮、界面流程度摊册。同時,我們需要具備收集奔潰日志的功能颊艳,這樣才能更好的減少崩潰茅特,提高用戶體驗。
通過 Storyboard 創(chuàng)建視圖對象時棋枕,其資源消耗會比直接通過代碼創(chuàng)建對象要大非常多白修,在性能敏感的界面里,Storyboard 并不是一個好的技術(shù)選擇戒悠。
盡量推遲對象創(chuàng)建的時間熬荆,并把對象的創(chuàng)建分散到多個任務(wù)中去。盡管這實現(xiàn)起來比較麻煩绸狐,并且?guī)淼膬?yōu)勢并不多卤恳,但如果有能力做,還是要盡量嘗試一下寒矿。如果對象可以復(fù)用突琳,并且復(fù)用的代價比釋放、創(chuàng)建新對象要小符相,那么這類對象應(yīng)當盡量放到一個緩存池里復(fù)用拆融。
對象銷毀
對象的銷毀雖然消耗資源不多蠢琳,但累積起來也是不容忽視的。通常當容器類持有大量對象時镜豹,其銷毀時的資源消耗就非常明顯傲须。同樣的,如果對象可以放到后臺線程去釋放趟脂,那就挪到后臺線程去泰讽。這里有個小 Tip:把對象捕獲到 block 中,然后扔到后臺隊列去隨便發(fā)送個消息以避免編譯器警告昔期,就可以讓對象在后臺線程銷毀了已卸。
NSArray *tmp = self.array;
self.array = nil;
dispatch_async(queue, ^{
[tmp class];
});
布局計算
視圖布局的計算是 App 中最為常見的消耗 CPU 資源的地方。如果能在后臺線程提前計算好視圖布局硼一、
并且對視圖布局進行緩存累澡,那么這個地方基本就不會產(chǎn)生性能問題了。
不論通過何種技術(shù)對視圖進行布局般贼,其最終都會落到對 UIView.frame/bounds/center 等屬性的
調(diào)整上愧哟。上面也說過,對這些屬性的調(diào)整非常消耗資源具伍,所以盡量提前計算好布局翅雏,在需要時一次性調(diào)
整好對應(yīng)屬性圈驼,而不要多次人芽、頻繁的計算和調(diào)整這些屬性。
Autolayout
Autolayout 是蘋果本身提倡的技術(shù)绩脆,在大部分情況下也能很好的提升開發(fā)效率萤厅,但是 Autolayout 對于復(fù)雜視圖來說常常會產(chǎn)生嚴重的性能問題。隨著視圖數(shù)量的增長靴迫,Autolayout 帶來的 CPU 消耗
會呈指數(shù)級上升惕味。如果你不想手動調(diào)整 frame 等屬性,你可以用一些工具方法替代
(比如常見的 left/right/top/bottom/width/height 快捷屬性)玉锌,或者使用
ComponentKit名挥、AsyncDisplayKit 等框架。
文摘出處 : http://www.reibang.com/p/f4adce56166f
感謝原作者 吳白