当我连续两次执行一个简单的JS函数时,它的成本是计算能力的两倍吗?



一个简化的例子:

function shorten(string) {
  return string.slice(0, 3);
}
const today = "Friday";
if (shorten(today) === "Fri") {
  console.log("Oh yeah it's " + shorten(today));
}

shorten(today)在这里被叫了两次,这让我感觉很糟糕。我相信我们每天都会遇到这种情况,我们所做的是先将shorten(today)的值存储在一个变量中,然后使用该变量两次。

我的问题是:现代JS引擎是否足够智能,以至于我实际上不需要担心它?

如果多次

运行shorten,V8 引擎有一个 JIT 编译器,它将优化该段代码,以便下次运行得更快。

当它第二次遇到相同的函数调用时,也许它能够意识到它刚刚做了相同的计算,并且仍然在内存中拥有结果

你所描述的被称为记忆,而 V8 没有这样做。但是,那里有库(例如 fast-memoize (确实如此。

但你最好的办法仍然是将计算结果存储在变量中并引用它。

当我连续两次执行一个简单的JS函数时,它的成本是两次吗 计算能力?

是的。考虑为什么使用循环从数组的开头迭代到结束比从头到尾和端到端迭代更快?

现代JS引擎是否足够智能,以至于我实际上不需要 担心吗?

不。没有引擎可以可靠地预测 JavaScript 函数调用的返回值。请参阅是否已在数学上证明防病毒软件无法检测到所有病毒?是否可以制作一个正则表达式来确定函数的返回类型?

最新更新