Tem muitas formas de iterar um array no JavaScript (conheça as principais aqui), o que torna a escolha de qual iterador usar mais difícil, então confira o que é mais rápido for ou foreach no JavaScript.
Dentre as principais maneiras de iterar um array no JavaScript se destacam o for e o foreach.
O primeiro e mais antigo é o for, estrutura básica da linguagem, que faz a iteração sobre os índices do array.
Em contrapartida o segundo (foreach) entrou na especificação do ES5 e itera sobre os elementos do array.
Além disso o foreach tem alguns outros parâmetros como o índice atual do array por exemplo.
Da mesma forma da estrutura de iteração a estrutura dos dois métodos é bem diferente.
O for é uma função básica na linguagem e espera três parâmetros.
Por outro lado o forEach é um método embutido na da classe Array.prototype e espera como parâmetro obrigatório somente uma função de callback.
Uma outra diferença é que possível parar o for usando o comando break, mas não é possível parar o forEach.
Além disso não é possível usar funções assíncronas dentro de um forEach.
Testes
Agora que já vimos um pouco de cada método vamos conhecer a metodologia de testes.
Inicialmente vamos iterar um array de inteiros com 50000 elementos.
Já para medir o tempo para leitura do array vamos usar o console.time()
junto do console.timeEnd()
.
No teste inicial temos o for percorrendo o array em 2112.33 ms.
Já o forEach percorreu o array em 2375.49 ms.
No primeiro teste o for teve cerca de 10% mais velocidade.
Agora vamos ver como os dois se comportam com um volume menor de dados, só 500 registros.
Dessa vez o for percorreu o array em 23ms enquanto o forEach percorreu em só 20.1 ms, com 10% mais velocidade que o for.
Bom analisando friamente vimos que para grandes coleções é melhor usar o for quando falamos somente em performance.
Porém quando a coleção é menor o ideal é usar o forEach.
O que é mais rápido for ou forEach no JavaScript – Conclusão
Em suma como visto nos testes os dois métodos tem uma performance bem próxima no uso geral.
Mas o que eu gostaria de lembrar que performance não é tudo.
Em diversos momentos vale mais a pena usar uma função um pouco menos performática como o forEach e aumentar e muito a facilidade de manutenção do código do que ganhar um pouco de performance e ter um código mais complicado de dar manutenção.
Além disso se a performance for realmente importante ainda existem formas de melhorar ainda mais a performance.
Um bom ponto pode ser visto nessa pergunta no StackOverflow.
Agora se você quiser aprender a construir aplicações web com alta performance eu recomendo o Pacote Full-Stack, dos nossos parceiros da Danki Code.
Acabei de copiar o teu teste e não foi esses os valores que eu tive. o forEach foi superior que o for.
for: 2.149169921875 ms
forEach: 1.35498046875 ms
Jucieny, eu vi seu comentário no FB, obrigado.
Eu estou tentando entender o motivo disso acontecer, aqui nos meus testes o for foi sempre mais rápido.
Você usou o console.log interno? O console é bem custoso isso pode fazer diferença.
Acredito que esses testes seriam melhor apresentados se fossem estatísticos. É muito difícil comparar performance por tempo porque depende muito do sistema operacional, do que acontece na máquina no momento, etc. Por isso, se o teste fosse repetido umas 500 vezes, levantando média e removendo os que estão muito fora da curva, talvez o teste seria mais representativo da performance.