手機項目開發比PC項目開發對性能要求更高。簡單點說,就是目前手機性能和PC性能比起來,硬件性能完全不是一個量級,在Pc上跑起來沒什麼問題的項目,搬到手機上,很可能就吃不消甚至卡死。
計算機的房展分爲海量存儲和高性能(PC)、低功耗微型化(手機),雖然現在手機性能跟之前比提升了很多,但是PC性能也提升了很多,兩者還是沒法比。兩者的發展截然相反。另外,兩者使用的不同結構的計算機,從結構上導致了PC和手機的性能差距。
優化方法:
1、減少多餘調用、精簡代碼。
eg:
//重複計算採用臨時變量存儲
if(model.getStance.getState() == 1){
}else if(model.getStance.getState() == 2){
}else{
}
//這裏獲取的都是同一個state,如果model裏面的getState()方法運算量較小,差異不明顯,如果getState()運算複雜,例如需要1秒,那麼這裏因爲計算了兩次,平白無故就多了一秒,如果有更多的if eles,運行速度差異會更加明顯。
可以採用的優化方案是,直接定義一個臨時變量存儲state,這樣不管有多少個if else,都只執行了一次getState()這個方法
//避免重複代碼
private function fun(a:int,b:int):void{
if(a>b){
//someCode
doFun1();
}else{
//someCode
doFun2();
}
}
以上,兩處的someCode爲相同的代碼
存在重複代碼,可以將重複部分提取出來
private function fun(a:int,b:int):void{
//someCode
if(a>b){
doFun1();
}else{
doFun2();
}
}
雖然只是減少了代碼量,對運行速度並沒有影響,但是手機項目發佈JS文件的時候,對代碼量有限制,而且代碼量更少,下載代碼會更快,除此之外,對於維護成本,以後維護someCode部分的時候,只需要改一處即可,故去掉重複代碼還是很有必要的
var item:* = bagModel.getStance.getItemById(itemId);
if(!item){
item = new Item();
}
if(!item){
//someCode
if(item.ItemOnlyId.compare(numLong)){
}
}
//這裏其實也可以視爲去掉重複代碼,前面已經判讀了Item不存在的時候,new一個item,所有後面完全沒必要再加一個!item的判斷,必定爲true,除了之外,以上匹配long的時候,可以選用更高效更簡短的equal
用arr.sort()進行排序時,對於int類型的數據,沒必要自己判斷大小,if()直接return a - b或者b - a就行了,
這個沒什麼好說的,精簡代碼。
if(a>b){
return a;
}else if(b>a){
return b;
}else{
return 0;
}
//改成直接return就行了
return a-b;
2、大多數情況下,協議時間單位直接用秒,沒必要用毫秒,一般情況下,考慮到網絡延遲,對於精度要求不高的情況,精確到毫秒並沒有多大意義。而且,用的人還要再用toNumber進行轉化,會增加開銷。故協議裏面用到時間時,推薦直接用int,沒必要用long
3、複用取值不變的對象實例,減少沒必要的頻繁創建
代碼中經常用到的 var arr:Array = [1,2];
這種,其實每次調用方法的時候,都會new一個,如果是僅有此處調用,沒什麼問題,如果是通用接口或者調用頻率較大的接口,就顯得比較浪費了,每次調用都會new,內存分配次數多了, 內存碎片就多,GC(垃圾收集器)開銷就大,GC開銷大到一定程度的表現就是卡頓。
eg:
private function getArr(index:int):Array{
if(index == 0){
return [1,2];
}else if(index == 1){
return [3,4];
}else if(index == 3){
return [4,5];
}
}
//這種可以直接定義一個static const字典,返回字典對象就行
public static const dic:Object = function ():Object{
var dic:Object = {};
dic[0] = [1,2];
dic[1] = [3,4];
dic[2] = [4,5];
return dic;
}();
原方法可以優化爲
private function getArr(index:int):Array{
return dic[index];
}
//另外,對於經常調用的靜態數據,一開始就Get好,不要每次都get。複用有查詢(計算)成本的對象,減少查詢(計算)開銷
比如配置表總數據,這個可以在解析配置表的時候,直接用obj存起來,下次再調的時候,直接調obj就行,而不用每次都重新解析一次表格
4、被頻繁反覆調用的方法裏,不要用閉包