Estou iniciando um projeto com jQuery.
Que armadilhas / erros / equívocos / abusos / abusos você teve no seu projeto jQuery?
javascript
jquery
flybywire
fonte
fonte
Respostas:
Desconhecer o desempenho atingido e usar em excesso os seletores em vez de atribuí-los a variáveis locais. Por exemplo:-
Ao invés de:-
Ou ainda melhor com encadeamento : -
Eu achei isso o momento esclarecedor em que percebi como as pilhas de chamadas funcionam.
Editar: sugestões incorporadas nos comentários.
fonte
var $label = $('#label');
Entenda como usar o contexto. Normalmente, um seletor de jQuery pesquisará todo o documento:
Mas você pode acelerar as coisas pesquisando dentro de um contexto:
fonte
[0]
.$('.myClass', ct);
ou se você sabe ct é uma instância de jQuery você pode usar encontrarct.find(".myClass")
Não use seletores de classe simples, como este:
Isso acabará analisando cada elemento para ver se ele possui uma classe de "botão".
Em vez disso, você pode ajudá-lo, como:
Eu aprendi isso no ano passado com no blog Rebecca Murphy
Atualização - Esta resposta foi dada há mais de 2 anos e não está correta para a versão atual do jQuery. Um dos comentários inclui um teste para provar isso. Há também uma versão atualizada do teste que inclui a versão do jQuery no momento desta resposta.
fonte
$('.b')
poderia usardocument.getElementsByClassName('b')
se o navegador suportar, mas isso$('a.b')
fará com que ele obtenha todos os elementos correspondentes com a classeb
e confirme se são âncoras em uma operação de dois estágios. O último parece mais trabalho para mim. Para uma analogia da vida real, tente o seguinte: Encontre todas as meias no meu quarto. Agora, jogue fora os que não estão na minha cômoda.Tente dividir funções anônimas para poder reutilizá-las.
fonte
(anonymous)
. Leia mais sobre esta dica aqui: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…Eu já vi centenas de linhas de código dentro da instrução doc ready. Feio, ilegível e impossível de manter.
fonte
Ao usar a
$.ajax
função para solicitações do Ajax para o servidor, evite usar ocomplete
evento para processar dados de resposta. Será acionado se a solicitação foi bem-sucedida ou não.Em vez de
complete
usarsuccess
.Consulte Eventos do Ajax nos documentos.
fonte
Eventos de animação em "encadeamento" com retornos de chamada.
Suponha que você queira animar um parágrafo que desaparece ao clicar nele. Você também quis remover o elemento do DOM posteriormente. Você pode pensar que pode simplesmente encadear os métodos:
Neste exemplo, .remove () será chamado antes que .fadeOut () seja concluído, destruindo seu efeito de desbotamento gradual e simplesmente fazendo o elemento desaparecer instantaneamente. Em vez disso, quando você deseja acionar um comando apenas após concluir o anterior, use os retornos de chamada:
O segundo parâmetro de .fadeOut () é uma função anônima que será executada quando a animação .fadeOut () for concluída. Isso cria um desbotamento gradual e uma remoção subsequente do elemento.
fonte
Se você ligar () o mesmo evento várias vezes, ele será acionado várias vezes. Eu costumo sempre ir
unbind('click').bind('click')
apenas por segurançafonte
Não abuse dos plug-ins.
Na maioria das vezes, você precisará apenas da biblioteca e talvez da interface do usuário. Se você simplificar, seu código poderá ser mantido a longo prazo. Nem todos os plug-ins são suportados e mantidos, na verdade a maioria não. Se você pode imitar a funcionalidade usando os elementos principais, recomendo fortemente.
Os plug-ins são fáceis de inserir no seu código, economizam um pouco de tempo, mas quando você precisar de algo extra, é uma má idéia modificá-los, pois você perde as atualizações possíveis. O tempo que você economiza no início, perde mais tarde alterando os plug-ins obsoletos.
Escolha os plug-ins que você usa com sabedoria. Além da biblioteca e da interface do usuário, uso constantemente $ .cookie , $ .form , $ .validate e thickbox . De resto, desenvolvo principalmente meus próprios plug-ins.
fonte
Armadilha: Usando loops em vez de seletores.
Se você encontrar o método jQuery '.each' para iterar sobre os elementos DOM, pergunte a si mesmo se pode usar um seletor para obter os elementos.
Mais informações sobre os seletores jQuery:
http://docs.jquery.com/Selectors
Armadilha: NÃO use uma ferramenta como o Firebug
O Firebug foi praticamente criado para esse tipo de depuração. Se você estiver mexendo no DOM com Javascript, precisará de uma boa ferramenta como o Firebug para lhe dar visibilidade.
Mais informações sobre o Firebug: http://getfirebug.com/
Outras grandes idéias estão neste episódio do Podcast Polimórfico: (Segredos do jQuery com Dave Ward) http://polymorphicpodcast.com/shows/jquery/
fonte
Incompreensão de usar esse identificador no contexto certo. Por exemplo:
E aqui uma das amostras como você pode resolvê-lo:
fonte
Evite pesquisar o DOM inteiro várias vezes. Isso é algo que realmente pode atrasar seu script.
Ruim:
Boa:
Ruim:
Boa:
fonte
Sempre armazene em cache $ (this) em uma variável significativa, especialmente em um .each ()
Como isso
fonte
$self
ou$this
se você estiver com preguiça de pensar em um bom nome de variável.Semelhante ao que Repo Man disse, mas não exatamente.
Ao desenvolver winforms do ASP.NET, costumo
esquecendo o sinal #. A forma correta é
fonte
Eventos
não clona nenhum dos eventos - você precisa religar todos eles.
De acordo com o commen do JP - clone () rebaixa os eventos se você passar true.
fonte
Evite a criação múltipla dos mesmos objetos jQuery
fonte
$this = $(this);
em uma linha separada. Se você pode (sem fazer uma bagunça), esqueça$this
e encadeie tudo:$(this).fadeIn().fadeIn();
Eu digo isso também para JavaScript, mas jQuery, JavaScript NUNCA deve substituir o CSS.
Além disso, verifique se o site é utilizável por alguém com o JavaScript desativado (não tão relevante hoje como no passado, mas sempre bom ter um site totalmente utilizável).
fonte
Fazendo muitas manipulações DOM. Embora os métodos .html (), .append (), .prepend () etc. sejam ótimos, devido à maneira como os navegadores renderizam e renderizam novamente as páginas, usá-los com muita freqüência causará lentidão. Geralmente, é melhor criar o html como uma string e incluí-lo no DOM uma vez, em vez de alterá-lo várias vezes.
Ao invés de:
Tente o seguinte:
Ou mesmo isso ($ wrapper é um elemento recém-criado que ainda não foi injetado no DOM. O acréscimo de nós a essa div do wrapper não causa lentidão e, no final, anexamos o $ wrapper ao $ parent, usando apenas uma manipulação do DOM ):
fonte
Usando ClientID para obter a identificação "real" do controle em projetos ASP.NET.
Além disso, se você estiver usando o jQuery no SharePoint, deverá chamar jQuery.noConflict ().
fonte
Passando IDs em vez de objetos jQuery para funções:
Passar um conjunto embrulhado é muito mais flexível:
fonte
Uso excessivo de encadeamento.
Veja isso:
Explicação
fonte
Use cadeias no estilo acumulador
Usando o operador +, uma nova string é criada na memória e o valor concatenado é atribuído a ela. Somente depois disso, o resultado é atribuído a uma variável. Para evitar a variável intermediária para o resultado da concatenação, você pode atribuir diretamente o resultado usando o operador + =. Lento:
Mais rápido:
Operações primitivas podem ser mais rápidas que chamadas de função
Considere o uso de operação primitiva alternativa sobre chamadas de função em loops e funções críticas de desempenho. Lento:
Mais rápido:
Leia mais em JavaScript Performance Best Practices
fonte
Se você deseja que os usuários vejam entidades html no navegador, use 'html' em vez de 'text' para injetar uma string Unicode, como:
fonte
meus dois centavos)
Geralmente, trabalhar com jquery significa que você não precisa se preocupar com elementos DOM reais o tempo todo. Você pode escrever algo como isto -
$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})
- e esse código será executado sem gerar erros.Em alguns casos, isso é útil, em alguns casos - nem um pouco, mas é um fato que o jquery tende a ser, bem, compatível com partidas vazias. Ainda,
replaceWith
lançará um erro se alguém tentar usá-lo com um elemento que não pertence ao documento. Acho isso bastante contra-intuitivo.Outra armadilha é, na minha opinião, a ordem dos nós retornados pelo método prevAll () -
$('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()
. Não é grande coisa, na verdade, mas devemos ter em mente esse fato.fonte
Se você planeja usar o Ajax em muitos dados, como, digamos, 1500 linhas de uma tabela com 20 colunas, nem pense em usar o jQuery para inserir esses dados em seu HTML. Use JavaScript simples. O jQuery será muito lento em máquinas mais lentas.
Além disso, na metade do tempo o jQuery fará coisas que o tornarão mais lento, como tentar analisar as tags de script no HTML recebido e lidar com as peculiaridades do navegador. Se você deseja uma velocidade de inserção rápida, use JavaScript simples.
fonte
.innerHTML
fará. Mas se você estiver criando algo como o Gmail, em que o usuário mantém a aba aberta por horas, você terá que aceitar o problema e lidar com a lentidão extra. Para os curiosos, aqui está exatamente o que o jQuery.html()
faz: james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.htmlUsando o jQuery em um projeto pequeno que pode ser concluído com apenas algumas linhas de JavaScript comum.
fonte
couple of lines of ordinary JavaScript
Claro que não há problema. Mas quando é que é só isso? Pessoas que dizem "por que não usar javascript vanilla ??" ainda não foi mordido o suficiente pelo IE ... e para não mencionar quanto código de cruft e clichê você precisa escrever para fazer coisas simples em JS simples e antigo.Não entendendo a ligação de eventos. JavaScript e jQuery funcionam de maneira diferente.
Por demanda popular, um exemplo:
No jQuery:
Sem jQuery:
Basicamente, os ganchos necessários para JavaScript não são mais necessários. Ou seja, use a marcação embutida (onClick, etc), porque você pode simplesmente usar os IDs e classes que um desenvolvedor usaria normalmente para fins de CSS.
fonte