para
for
os loops são muito mais eficientes. É uma construção de loop projetada especificamente para iterar enquanto uma condição for verdadeira , ao mesmo tempo que oferece um mecanismo de revisão (geralmente para aumentar o iterador). Exemplo:
for (var i=0, n=arr.length; i < n; ++i ) {
...
}
Isso não quer dizer que o for -loops será sempre mais eficiente, apenas que os mecanismos e navegadores JS os otimizaram para ser assim. Ao longo dos anos, houve compromissos quanto a qual construção de loop é mais eficiente (para, enquanto, reduz, inverte enquanto, etc) - diferentes navegadores e mecanismos JS têm suas próprias implementações que oferecem diferentes metodologias para produzir os mesmos resultados. À medida que os navegadores otimizam ainda mais para atender às demandas de desempenho, teoricamente [].forEach
poderiam ser implementados de forma mais rápida ou comparável a um for
.
Benefícios:
- eficiente
- rescisão antecipada do loop (honras
break
e continue
)
- controle de condição (
i<n
pode ser qualquer coisa e não limitado ao tamanho de uma matriz)
- escopo variável (
var i
deixa i
disponível após o término do loop)
para cada
.forEach
são métodos que iteram principalmente em arrays (também em outros enumeráveis, como objetos Map
e Set
). Eles são mais novos e fornecem um código subjetivamente mais fácil de ler. Exemplo:
[].forEach((val, index)=>{
...
});
Benefícios:
- não envolve configuração de variável (itera sobre cada elemento da matriz)
- funções / funções de seta abrangem a variável para o bloco
No exemplo acima, val
seria um parâmetro da função recém-criada. Portanto, quaisquer variáveis chamadas val
antes do loop manteriam seus valores após seu término.
- subjetivamente mais sustentável, pois pode ser mais fácil identificar o que o código está fazendo - iterando sobre um enumerável; enquanto um loop for pode ser usado para qualquer número de esquemas de looping
atuação
Desempenho é um tópico complicado, que geralmente requer alguma experiência quando se trata de premeditação ou abordagem. Para determinar com antecedência (durante o desenvolvimento) quanta otimização pode ser necessária, um programador deve ter uma boa ideia da experiência anterior com a pasta de problemas, bem como um bom entendimento das soluções potenciais.
Usar o jQuery em alguns casos pode ser muito lento às vezes (um desenvolvedor experiente pode saber disso), enquanto outras vezes pode não ser um problema, caso em que a compatibilidade do navegador cruzado da biblioteca e a facilidade de executar outras funções (por exemplo, AJAX, tratamento de eventos) valeria a pena o tempo de desenvolvimento (e manutenção) economizado.
Outro exemplo é, se desempenho e otimização fossem tudo, não haveria outro código além de máquina ou montagem. Obviamente esse não é o caso, pois há muitas linguagens de alto e baixo nível diferentes, cada uma com suas próprias compensações. Essas compensações incluem, mas não estão limitadas a especialização, facilidade e velocidade de desenvolvimento, facilidade e velocidade de manutenção, código otimizado, código livre de erros, etc.
Abordagem
Se você não tem um bom entendimento se algo exigirá código otimizado, geralmente é uma boa regra escrever código sustentável primeiro. A partir daí, você pode testar e identificar o que precisa de mais atenção quando necessário.
Dito isso, certas otimizações óbvias devem fazer parte da prática geral e não exigir qualquer reflexão. Por exemplo, considere o seguinte loop:
for (var i=0; i < arr.length; ++i ){}
Para cada iteração do loop, JavaScript está recuperando as arr.length
operações de custo de pesquisa de chave em cada ciclo. Não há razão para que não seja:
for (var i=0, n=arr.length; i < n; ++i){}
Isso faz a mesma coisa, mas recupera apenas arr.length
uma vez, armazenando a variável em cache e otimizando seu código.