Recentemente, venho fazendo muitos pop-ups de janela modal e o que não, para o qual usei o jQuery. O método que eu usei para criar os novos elementos na página tem sido esmagadoramente ao longo das linhas de:
$("<div></div>");
No entanto, estou sentindo que esse não é o melhor ou o método mais eficiente de fazer isso. Qual é a melhor maneira de criar elementos no jQuery a partir de uma perspectiva de desempenho?
Esta resposta tem os parâmetros de referência para as sugestões abaixo.
javascript
jquery
html
dom
Darko Z
fonte
fonte
Respostas:
Eu uso
$(document.createElement('div'));
Benchmarking mostra que esta técnica é a mais rápida. Especulo que isso ocorre porque o jQuery não precisa identificá-lo como um elemento e criar o próprio elemento.Você realmente deve executar benchmarks com diferentes mecanismos Javascript e pesar seu público com os resultados. Tome uma decisão a partir daí.
fonte
appendTo
... Como os comentários estavam obviamente errados, eu os removi.pessoalmente, eu sugeriria (para facilitar a leitura):
alguns números das sugestões até agora (safari 3.2.1 / mac os x):
fonte
Questão:
Responda:
Como é sobre
jQuery
isso, acho melhor usar essa abordagem (limpa) (você está usando)DEMO.
Dessa forma, você pode até usar manipuladores de eventos para o elemento específico, como
DEMO.
Mas quando você lida com muitos elementos dinâmicos, evite adicionar eventos
handlers
em um elemento específico. Em vez disso, use um manipulador de eventos delegados, comoDEMO.
Portanto, se você criar e anexar centenas de elementos com a mesma classe, ou seja, (
myClass
), menos memória será consumida para manipulação de eventos, porque apenas um manipulador estará lá para fazer o trabalho para todos os elementos inseridos dinamicamente.Atualização: Como podemos usar a seguinte abordagem para criar um elemento dinâmico
Mas o
size
atributo não pode ser configurado usando essa abordagem usandojQuery-1.8.0
ou mais tarde e aqui está um relatório de bug antigo , veja este exemplo usando ojQuery-1.7.2
que mostra que osize
atributo está configurado para30
usar o exemplo acima, mas usando a mesma abordagem que não podemos definir osize
atributo usandojQuery-1.8.3
, aqui é um violino que não funciona . Então, para definir osize
atributo, podemos usar a seguinte abordagemOu este
Podemos passar
attr/prop
como um objeto filho, mas ele funciona emjQuery-1.8.0 and later
versões, verifique este exemplo, mas não funcionará emjQuery-1.7.2 or earlier
(não testado em todas as versões anteriores).BTW, retirado do
jQuery
relatório de erroEles recomendaram o uso da seguinte abordagem ( funciona também nas anteriores , testadas em
1.6.4
)Portanto, é melhor usar essa abordagem, IMO. Esta atualização é feita depois que eu li / encontrei esta resposta e, nesta resposta, mostra que se você usar em
'Size'(capital S)
vez de'size'
, simplesmente funcionará bem , mesmo emversion-2.0.2
Leia também sobre prop , porque há uma diferença,
Attributes vs. Properties
varia de acordo com as versões.fonte
$('<div>', {...})
você está passando um objeto que contém todos os atributos e$('<div>').attr({...})
está criando um elemento sem nenhum atributo, mas configurando os atributos usando oattr()
método posteriormente.jQuery.com
web site poderia ser votos @RafaelRuizTabares, ou google it :-)Na verdade, se você estiver fazendo
$('<div>')
, o jQuery também usarádocument.createElement()
.(Basta dar uma olhada na linha 117 ).
Há alguma sobrecarga de chamada de função, mas, a menos que o desempenho seja crítico (você está criando centenas [milhares] de elementos), não há muitas razões para voltar ao DOM simples .
Apenas a criação de elementos para uma nova página da web provavelmente é o caso em que é melhor se atentar à maneira do jQuery de fazer as coisas.
fonte
Se você tiver muito conteúdo HTML (mais do que apenas uma única div), considere criar o HTML na página em um contêiner oculto, atualizá-lo e torná-lo visível quando necessário. Dessa forma, grande parte da sua marcação pode ser pré-analisada pelo navegador e evitar o atolamento do JavaScript quando chamada. Espero que isto ajude!
fonte
Esta não é a resposta correta para a pergunta, mas ainda gostaria de compartilhar isso ...
Usar apenas
document.createElement('div')
e pular o JQuery melhorará muito o desempenho quando você desejar criar muitos elementos rapidamente e anexar ao DOM.fonte
Acho que você está usando o melhor método, embora possa otimizá-lo para:
fonte
Você não precisa de desempenho bruto de uma operação que será executada com pouca frequência do ponto de vista da CPU.
fonte
jQuery(html :: String)
método está perfeitamente bem. A menos que a situação seja extremamente incomum, é improvável que se obtenha melhor desempenho percebido . Gaste energia de otimização nos casos que poderiam usá-lo. Além disso, o jQuery é otimizado para velocidade de várias maneiras. Faça coisas sãs com isso e confie, mas verifique se é rápido.Você precisará entender que a importância do desempenho da criação de elementos é irrelevante no contexto do uso do jQuery.
Lembre-se de que não existe um propósito real de criar um elemento, a menos que você realmente o utilize.
Você pode ficar tentado a testar o desempenho com algo como
$(document.createElement('div'))
vs.$('<div>')
e obter grandes ganhos de desempenho usando$(document.createElement('div'))
mas esse é apenas um elemento que ainda não está no DOM.No entanto, no final do dia, você desejará usar o elemento de qualquer maneira, para que o teste real inclua f.ex. .appendTo ();
Vamos ver, se você testar o seguinte um contra o outro:
Você notará que os resultados variam. Às vezes, uma maneira tem melhor desempenho que a outra. E isso ocorre apenas porque a quantidade de tarefas em segundo plano no seu computador muda com o tempo.
Teste-se aqui
Portanto, no final do dia, você deseja escolher a maneira menor e mais legível de criar um elemento. Dessa forma, pelo menos, seus arquivos de script serão os menores possíveis. Provavelmente, um fator mais significativo no ponto de desempenho do que a maneira de criar um elemento antes de usá-lo no DOM.
fonte
document.getElementById('target).appendChild(document.createElement('div'));
Alguém já fez uma referência: jQuery document.createElement equivalente?
$(document.createElement('div'))
é o grande vencedor.fonte
Um ponto é que pode ser mais fácil fazer:
Depois, faça tudo isso com chamadas jquery.
fonte
Estou usando o jquery.min v2.0.3. É melhor para mim usar o seguinte:
como segue:
O tempo de processamento do primeiro código é muito menor que o segundo código.
fonte