[code] Não otimize demais
lnfnunes opened this issue · 5 comments
- Neste trecho, o exemplo não está invertido? Imagino que o correto seja o abaixo.
- Outro detalhe é sobre o argumento que foi feito em cima de browsers antigos, porém a maioria dos códigos estão em ES2015, o que perde um pouco o sentido do argumento. Talvez seja melhor escrever de outra forma...
Ruim:
// Em navegadores antigos, cada iteração de `list.length` não cacheada seria custosa
// devido a recomputação de `list.length`. Em navegadores modernos, isto é otimizado.
for (let i = 0; i < list.length; i++) {
// ...
}
Bom:
for (let i = 0, len = list.length; i < len; i++) {
// ...
}
Quando preciso fazer um for geralmente faço a declaração fora de ambas variaveis, isso pode ser considerado errado ?
var i = 0;
var len = list.length ;
for( ; i < len; i ++ ){
// ...
}
ps: Parabéns pela iniciativa mano !!
@kurybr, da forma como escreveu não é errado não.
Neste caso é apenas forma de escrever diferente... mas pessoalmente prefiro manter os valores próximos na declaração do for mesmo, o que talvez possa entrar na regra de "Evite o mapeamento mental"
Mas a questão que eu perguntei na issue é relacionado a performance.
O fato de não cachear o valor do list.length em uma variável:
for (let i = 0; i < list.length; i++) { .. }
Isso é menos performático, pois a cada iteração do for, ele fica revalidando o valor do length toda vez.
Diferente de quando armazenamos o valor uma vez em uma variável, como é o caso do "len".
[]s
@lnfnunes esta é justamente uma otimização que ele diz que é irrelevante, pois o browser já faz isto para você, por isso que ele colocou a versão que cacheia como a ruim, porque você está (como diz o titulo da seção) otimizando demais sem necessidade.
Agora, em relação ao seu argumento sobre browsers antigos acho que você tem razão, seria interessante abrir uma issue no original com esse comentário. O que você acha?
Valeu pelo toque @fesnt,
quando fiz a leitura não me atentei a categoria da dica e agora faz total sentido! 😃
[]s