这些是有效的循环优化吗?

本文关键字:优化 循环 有效 | 更新日期: 2023-09-27 17:57:06

如果我执行以下操作,这是否被认为是非最佳(性能方面)?

// Is this optimal?
foreach (var fruit in basket.Fruits())
{
  // ....
}
// What about this?
for (var i = 0; i < basket.Fruits().length; ++i) {
  // ....
}
// Alternate way.
var fruits = basket.Fruits();
foreach (var fruit in fruits) 
{
  // ....
}

我正在寻找适用于.Net和Javascript的答案。

谢谢。

这些是有效的循环优化吗?

两者的性能相同。 basket.Fruits()返回一个对象,JavaScript 将为该对象创建一个迭代器。

另一种解决方案是使用

Object.keys(basket.Fruits()).forEach(function(fruit) {
  // ...
});

无论哪种方式,都不要专注于这种优化。JavaScript 速度很快,并且有许多自动优化。您应该专注于使您的代码尽可能清晰易读。完成后,如果您发现一个缓慢的部分,请专注于优化该部分。


根据您的编辑,您可以将数组的长度存储在循环初始化表达式中的变量中。然后,谓词表达式可以比较i<len而不是计算每次迭代的数组长度。

for (var i=0; len=basket.Fruits().length; i<len; i++) ...