性能/最佳实践:if语句中的语句for for循环或for循环

时间:2018-02-24 06:51:18

标签: javascript performance

为了编写简洁而快速的代码,我遇到了一个问题,并且有些搜索没有找到答案。在这种情况下编写代码的最佳做法是什么?



for (let i = 0; i < message.timesheets.length; i++) {
  if (message.timesheets.length > 1) {
    // Run function
  } else {
    // Run other function
  }
};
&#13;
&#13;
&#13;

OR

&#13;
&#13;
if (message.timesheets.length > 1) {
  for(let i = 0; i < message.timesheets.length; i++) {
    // Run function
  };
} else {
  for(let i = 0; i < message.timesheets.length; i++) {
    // Run other function
  };
}
&#13;
&#13;
&#13;

我的想法是第一个选项更容易阅读,但更少的预处理,因为它必须评估每次for循环循环时是否。第二个选项只需要在每次for循环循环时运行包含的函数,但是更难以读取并且更长。这两个片段同样出现的问题是哪种方式做得更好?如果一个人不一定比另一个人更快哪一个?

编辑:你们不明白的是,我并没有将整个项目复制到问题中。为了这个问题,我们假设message.timesheets数组的值可以等于一(1)和多于一(1)。

4 个答案:

答案 0 :(得分:1)

我会选择第二个选项,因为它只执行一个测试操作然后进入循环,而第一个选项将进入一个循环,它将在每次迭代时执行测试操作。

可以看作:

Loop
  |_Test
       |_ do
  |_Test
       |_ do
  |_Test
       |_ do
  |_Test
       |_ do
End

Test
   |_ Loop
      |_ do
      |_ do
      |_ do
      |_ do
   |_ End

分别我不是这方面的专家,只是我的意见,它还取决于JS解释器(或编译器)如何处理这种情况,可能有一些优化使第一个选项最好(或最差)。如果你想确定,你可以看一下JS引擎代码,比如谷歌的V8 JS引擎

答案 1 :(得分:1)

由于第二个for循环(在第二个例子中)只运行1次迭代,如果条件为假,你可以省略第二个循环。

if (message.timesheets.length > 1) {
  for(let i = 0; i < message.timesheets.length; i++) {
    // Run function
  };
} else if (message.timesheets.length == 1) {
  let i=0;
  // Run other function
}

感谢Bergi指出else语句应该是else,如果长度为1。

答案 2 :(得分:0)

重复评估循环中相同的if条件确实较慢。但是,除非您的数组方式非常,否则这无关紧要,相反,您应该专注于编写干净且可读的代码。

您可能(并且应该)简化为

const run = message.timesheets.length > 1 ? oneFunction : otherFunction;
for (const timesheet of message.timesheets)
  run(timesheet);

既干又快。

答案 3 :(得分:0)

由于您的测试(数组的大小)在必须循环之前是已知的,因此您无需将其保留到最后一刻。正如bergi指出的那样,使用测试选择要在一个循环中调用的函数。

基本上,这归结为过早优化。这真的无所谓。编写您的代码首先是可读的,然后在将来,如果您遇到性能问题,请调查原因。我敢打赌,这永远不会成为问题。

  在编程中,

Premature optimisation是在我们知道需要之前优化一段代码的行为。这是一个重要的问题,因为它往往浪费时间;还有其他任务要做,在微观层面看似问题似乎只是整个系统的一小部分。如果不退一步来分析整个

,你无法分辨什么是重要的