P: Como você torna um loop rápido?
R: Faça o mínimo possível dentro do loop.
Esta não é a melhor maneira de escrever um loop (explicarei o motivo a seguir)
for (var i = 0; i < bigArray.length; i++) {
doWork(bigArray[i]);
}
O padrão de loop típico acima executa estas etapas em cada iteração :
- Pesquisa de propriedade (
bigArray.length
) - Comparação de valor (
i < bigArray.length
) - Comparação de valores da condição de controle (verdadeiro | falso)
- Incremento numérico (
i++
) - Pesquisa de item de matriz (
bigArray[i]
) - Chamada de função (
doWork(...)
)
Aqui está um padrão de loop aprimorado:
var i = bigArray.length;
while(i--) {
doWork(bigArray[i]);
}
Ele executa apenas estas etapas em cada iteração:
- Comparação de valores da condição de controle (verdadeiro | falso)
- Decréscimo numérico ( )
i--
- Pesquisa de item de matriz ( )
bigArray[i]
- Chamada de função ( )
doWork(...)
O padrão de design aprimorado tem estes benefícios:
- Combina a condição de controle com a operação de decremento.
- Minimiza as pesquisas de propriedade (observando o comprimento da matriz uma vez)
- É 50% a 60% mais rápido que a primeira versão!
É rápido, compacto e fácil de ler, uso sempre que posso (mas nem sempre é a melhor escolha pelo facto de rodar ao contrário).
Essas são “micro otimizações”, mas quando você precisa espremer até o último quadro por segundo, cada escolha que você faz acrescenta (especialmente em dispositivos móveis e navegadores mais antigos).
Respostas relacionadas:
javascript foreach