增强else-if链的性能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了增强else-if链的性能相关的知识,希望对你有一定的参考价值。

我正在NodeJ上构建服务。我具有网络抓取功能,并且必须为不同的域调用不同的搜寻器。

if (domain == "aaa.kr") result = await crawlAA(args.url)
else if (domain == "aaa.com") result = await crawlA(args.url)
else if (domain == "bbb.com") result = await crawlB(args.url)
else if (domain == "ccc.com") result = await crawlC(args.url)
else if (domain == "d.com") result = await crawlD(args.url)
else result = await crawlOthers(args.url)

现在,我有大约10个else if子句。但是,我将需要添加超过50〜100个else-if,并且我认为这将来可能会成为问题。

有没有有效的方法来处理字符串if子句?主要由开始字母过滤是否有帮助?

答案

[性能在这里几乎绝对不是问题-没有循环或嵌套循环,如果您有很多else / if,这里的问题就是非常WET的代码。

而不是使用大量独立的crawl函数,而是使用由域索引的对象,例如:

const fns = {
  'aaa.kr': <code of crawlAA here>,
  'aaa.com': <code of crawlA here>,
  'bbb.com': <code of crawlB here>,
  // ...
};

然后在尝试找到result并调用它时,在对象上找到适当的函数值:

const fn = fns[domain];
const result = fn ? fn(args.url) : crawlOthers(args.url);

以上是关于增强else-if链的性能的主要内容,如果未能解决你的问题,请参考以下文章

优化 js中的if else-if 语句 过多的情况

实验三——for 语句及分支结构else-if

将最可能的真实条件放入 if、else-if 或 else 有啥不同

一行代码实现Python运行性能增强百倍,性能发动机numba模块介绍

一行代码实现Python运行性能增强百倍,性能发动机numba模块介绍

Android JNI 增强应用程序性能