建議24:優化if邏輯(1)
邏輯順序體現了人的思維的條理性和嚴密性。合理的順序可以提公升解決問題的品質,相反,混亂的順序很容易導致各種錯誤的發生。在分支結構中經常需要面臨各種優化邏輯順序的問題。
人在思考問題時,一般總會對各種最可能發生的情況做好準備,這叫做「有備而來」。分支結構中各種條件根據情況的先後、輕重來排定順序。如果把最可能的條件放在前面,把最不可能的條件放在後面,這樣程式在執行時總會按照**先後順序逐一檢測所有條件,直到發現匹配的條件時才停止繼續檢測。如果把最可能的條件放在前面,就等於降低了程式的檢測次數,自然也就提公升了分支結構的執行效率,避免空轉,這在大批量資料檢測中效果非常明顯。例如,對於乙個論壇系統來說,普通會員的數量要遠遠大於版主和管理員的數量。換句話說,大部分登入的使用者都是普通會員,如果把普通會員的檢測放在分支結構的前面,就會減少計算機檢測的次數。
if優化目標:最小化找到正確分支之前所判斷條件體的數量。if優化方法:將最常見的條件體放在首位。例如:
if(value < 5) else if(value > 5 && value < 10) else
這段**只有在value 值經常小於5 時才是最優的。如果value 經常大於或等於10,那麼在進入正確分支之前,必須兩次運算條件體,導致表示式的平均執行時間增加。if中的條件體應當總是按照從最大概率到最小概率的順序排列,以保證理論執行速度最快。
另外一種減少條件判斷數量的方法:將if編寫成一系列巢狀結構。使用乙個單獨的一長串的if結構通常導致執行緩慢,因為每個條件體都要被計算,例如:
if(value == 0) else if(value == 1) else if(value == 2) else if(value == 3) else if(value == 4) else if(value == 5) else if(value == 6) else if(value == 7) else if(value == 8) else if(value == 9) else
在這個if結構中,所計算的條件體的最大數目是10。如果假設value 的值在0~10 之間均勻分布,那麼會增加平均執行時間。為了減少條件判斷的數量,可重寫為一系列巢狀結構,例如:
if(value < 6) else if(value == 1) else
} else else if(value == 4) else
}} else else
} else else if(value == 9) else }}
JS程式設計建議 31 使用迭代
建議31 使用迭代 任何可以用遞迴實現的演算法都可以用迭代實現。迭代演算法通常包括幾個不同的迴圈,分別對應演算法過程的不同方面。雖然迭代也會導致效能問題,但是使用優化的迴圈替代長時間執行的遞迴函式可以提高效能,因為執行乙個迴圈比反覆呼叫乙個函式的開銷要低。例如,合併排序演算法是最常用的以遞迴實現的演...
JS程式設計建議 15 避免使用continue
建議15 避免使用continue continue語句與break語句用法相似,在迴圈結構中用於控制邏輯的執行方向。break語句用於停止迴圈,而continue語句卻用於再次執行迴圈。與break語句語法相同,continue語句可以跟隨乙個標籤名,用來指定繼續執行的迴圈結構的起始位置。cont...
JS程式設計建議 21 推薦提高迴圈效能的策略(1)
建議21 推薦提高迴圈效能的策略 1 每次執行迴圈體時都會產生效能開銷,增加總的執行時間,即使是迴圈體中最快的 累計迭代上千次,也將帶來不小的負擔。因此,減少迴圈的迭代次數可獲得顯著的效能提公升。例如 var iterations math.floor items.length 8 startat ...