如何優化很多if else堆積的代碼


項目開發初期的時候使用了簡單的if else  邏輯做簡單的路由判斷;

后期路由很多的情況下,比如500,這個時候再進行比對性能會比較低;

假設我們的路由寫的比較比較人性化,平均由二三個單詞組成,多的時候5個單詞,每個單詞平均長度6個字符,加上分隔符,路由平均長度為20個字符,

長的有30個字符;

如果用if else  這種進行比較,就變成了字符串匹配, 最差情況比對到最后一個,然后宣布失敗。

這種情況下字符比對的次數為20*200,

而路由又屬於經常會訪問的代碼塊;所以很有必要優化這一塊的性能;

那么,如何提高性能呢?

方法1.  前綴樹

  將整個路由組織為一個前綴樹map,  key, 組建前綴樹,  value  定義為函數指針。這樣,每次路由訪問平均比較次數就是20次;

  空間上如果路由比較稀疏,會存在空間利用率不高的情況,可以在路由上盡量緊湊一些;

方法2.  將路由轉化為數值

  將路由hash 后  作為case  的值,  將if  else  代碼結構變成switch  case  結構。   每次比較都需要先將被匹配路由轉化為數字;

  所以如何構建hash  函數,將hash  沖突解決在代碼生成的地方來降低二次匹配是一種值得考慮的方法。

      這里使用了字符*Base  累加和的方法。嘗試了多次,取到沒有沖突的BAse  3。

  但是base  3 ,為了簡便運算取4進制。那么只能容納64/4=16,最多16個字符長度;所以后續需要調整一下路由字符串

方法3. 直接用數字將路由代替

  用數字代替,缺點:無含義,不人性。但是效率高

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM