Substituindo o jQuery cada um por
-
20-09-2019 - |
Pergunta
Estou usando $ .ach para fazer iterações há algum tempo, mas continuo ouvindo as pessoas dizerem usar o JS nativo para fazer loops. Estou muito preocupado com o desempenho, mas não tenho certeza se é sempre possível substituir $. Encontre por uma maneira significativa.
Portanto, minhas perguntas são: é possível sempre substituir $ .a cada para, e se não é qual é a regra geral quando pode ser feita e quando não puder.
Eu tenho um assim:
$this.find("div.class").each(function (){
var $thisparent = $(this).parent();
if (condition) {
$(this).prepend($thisparent.text());
}
if (condition2) {
$(this).prepend($thisparent.text());
}
});
Solução
É isso que o jQuery faz com .each
, basicamente:
$.fn.each = function(callback) {
var i, length = this.length;
for(i = 0; i < length; ++i) {
callback.call(this[i]);
}
};
Portanto, não é difícil substituir o 'conteúdo' da sua função anônima pelo callback.call
ligar. Apenas certifique -se de substituir this
com um temporário com o objeto jQuery.
Convertendo seu código fornecido:
var foo = $this.find("div.class"),
fooLength = foo.length,
i,
$thisparent;
for (i = 0; i < fooLength; ++i) {
$thisparent = $(foo[i]).parent();
if (condition) {
$(foo[i]).prepend($thisparent.text());
}
if (condition2) {
$(foo[i]).prepend($thisparent.text());
}
}
Para velocidade (potencial) adicional, cache foo[i]
em um temporário. também, e atribuir $thisparent
Somente quando necessário. Se condition
e condition2
são mutuamente exclusivos, use um único if (condition || condition2)
.
Outras dicas
Alguém comparou o desempenho de for
e $.each
:
http://jquery-howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html