以下功能中哪些表现更好?

时间:2016-04-25 13:37:52

标签: javascript performance function

function reverseArray(array) {
  var output = [];
  for (var i = array.length - 1; i >= 0; i--)
    output.push(array[i]);
  return output;
}

function reverseArrayInPlace(array) {
  for (var i = 0; i < Math.floor(array.length / 2); i++) {
    var old = array[i];
    array[i] = array[array.length - 1 - i];
    array[array.length - 1 - i] = old;
  }
  return array;
}

我在chrome浏览器上尝试过performance.now(),但每次都会得到不同的结果。另外,是performance.now()检查代码性能的好方法吗?

2 个答案:

答案 0 :(得分:3)

你的第二个功能更快。

考虑循环需要多少次循环&#39; - 在第二个功能中,你将循环切成两半,这样它应该表现得更好。在第一个函数中,你一直循环遍历数组。

我们在这里谈论的是时间复杂性,其中有一些很好的答案,尤其是这一点:How to find time complexity of an algorithm

答案 1 :(得分:0)

在第二个函数中,您正在使用所谓的循环展开。是一种提高性能的已知方法(在循环期间,当循环完成迭代时,加载到分段管道中的指令会被droped,因此必须再次加载它们。)

但是,并非总是如此(请参阅此帖子Is GCC loop unrolling flag really effective?

你能做的最好就是自己做基准测试。