如何优化很多if else堆积的代码

Posted mu-zhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优化很多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. 直接用数字将路由代替

  用数字代替,缺点:无含义,不人性。但是效率高

 

以上是关于如何优化很多if else堆积的代码的主要内容,如果未能解决你的问题,请参考以下文章

jq代码优化,如何优化大量的if elseif语句

如何替换多个 if-else 语句来优化代码?

支付业务优化else if 代码

if/else的优化方法

代码存在大量的if/else优化方案总结

if...else代码优化