如何优化很多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. 直接用数字将路由代替

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

猜你喜欢

转载自www.cnblogs.com/mu-zhang/p/11402818.html
今日推荐