javascript - 提高 else-if 链的性能

标签 javascript node.js performance if-statement

我正在 NodeJs 上构建我的服务。 我有一个网页抓取功能,我必须为不同的域调用不同的爬虫。

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/ifs.

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

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

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

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

关于javascript - 提高 else-if 链的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59024597/

相关文章:

javascript - 瘦客户端和胖客户端之间的通信

javascript - 我的 jQuery 代码有什么问题?我想要一个 div 淡入

node.js - 请求的实体太大

javascript - Promise 合并流

performance - 基准 : bigint vs int on PostgreSQL

javascript - Socket.io 连接完好无损,但从不卸载的 React 组件在页面导航后变得对套接字事件无响应

c# - Javascript 文化总是 en-us

javascript - Uncaught Error : Module did not self-register

python - 使用索引以递归方式快速获取目录中的所有文件

java - 加快图像下载时间