Récemment, j'ai fait beaucoup de fenêtres pop-up modales et quoi, pour lesquelles j'ai utilisé jQuery. La méthode que j'ai utilisée pour créer les nouveaux éléments sur la page a été dans une large mesure le long des lignes de:
$("<div></div>");
Cependant, j'ai l'impression que ce n'est pas la méthode la meilleure ou la plus efficace pour le faire. Quelle est la meilleure façon de créer des éléments dans jQuery du point de vue des performances?
Cette réponse a les repères des suggestions ci-dessous.
javascript
jquery
html
dom
Darko Z
la source
la source
Réponses:
J'utilise l'
$(document.createElement('div'));
analyse comparative montre que cette technique est la plus rapide. Je suppose que c'est parce que jQuery n'a pas à l'identifier comme élément et à créer l'élément lui-même.Vous devriez vraiment exécuter des benchmarks avec différents moteurs Javascript et peser votre audience avec les résultats. Prenez une décision à partir de là.
la source
appendTo
, ... Parce que les commentaires étaient manifestement faux, je les ai supprimés.personnellement, je suggère (pour plus de lisibilité):
quelques chiffres sur les suggestions à ce jour (safari 3.2.1 / mac os x):
la source
Question:
Réponse:
Puisqu'il s'agit
jQuery
alors je pense qu'il vaut mieux utiliser cette approche (propre) (vous utilisez)DEMO.
De cette façon, vous pouvez même utiliser des gestionnaires d'événements pour l'élément spécifique comme
DEMO.
Mais lorsque vous traitez avec beaucoup d'éléments dynamiques, vous devez éviter d'ajouter un événement
handlers
dans un élément particulier, à la place, vous devez utiliser un gestionnaire d'événements délégué, commeDEMO.
Donc, si vous créez et ajoutez des centaines d'éléments avec la même classe, c'est-à-dire (
myClass
), alors moins de mémoire sera consommée pour la gestion des événements, car un seul gestionnaire sera là pour faire le travail pour tous les éléments insérés dynamiquement.Mise à jour: puisque nous pouvons utiliser l'approche suivante pour créer un élément dynamique
Mais l'
size
attribut ne peut pas être défini en utilisant cette approche en utilisantjQuery-1.8.0
ou plus tard et voici un ancien rapport de bogue , regardez cet exemple en utilisantjQuery-1.7.2
qui montre que l'size
attribut est défini en30
utilisant l'exemple ci-dessus mais en utilisant la même approche, nous ne pouvons pas définir d'size
attribut en utilisantjQuery-1.8.3
, ici est un violon qui ne travaille pas . Donc, pour définir l'size
attribut, nous pouvons utiliser l'approche suivanteOu celui-ci
Nous pouvons passer
attr/prop
comme un objet enfant mais il fonctionne dans lesjQuery-1.8.0 and later
versions vérifier cet exemple , mais il ne fonctionnera pas dansjQuery-1.7.2 or earlier
(non testé dans toutes les versions antérieures).BTW, extrait du
jQuery
rapport de bogueIls ont conseillé d'utiliser l'approche suivante ( fonctionne également dans les versions antérieures , testé dans
1.6.4
)Il est donc préférable d'utiliser cette approche, l'OMI. Cette mise à jour est effectuée après avoir lu / trouvé cette réponse et dans cette réponse montre que si vous utilisez à la
'Size'(capital S)
place,'size'
cela fonctionnera bien , même dansversion-2.0.2
Lisez également à propos de prop , car il y a une différence
Attributes vs. Properties
, elle varie selon les versions.la source
$('<div>', {...})
vous passez un objet qui contient tous les attributs et en$('<div>').attr({...})
vous créez un élément sans aucun attribut mais en définissant les attributs en utilisant laattr()
méthode plus tard.jQuery.com
site Web de recherche pourrait être utile @RafaelRuizTabares, ou google :-)En fait, si vous le faites
$('<div>')
, jQuery utilisera égalementdocument.createElement()
.(Jetez un coup d'œil à la ligne 117 ).
Il y a un surcoût d'appel de fonction, mais à moins que les performances ne soient critiques (vous créez des centaines [des milliers] d'éléments), il n'y a pas beaucoup de raisons de revenir au DOM ordinaire .
La simple création d'éléments pour une nouvelle page Web est probablement un cas dans lequel vous vous en tiendrez le mieux à la manière de faire jQuery .
la source
Si vous avez beaucoup de contenu HTML (plus qu'une simple div), vous pouvez envisager de construire le HTML dans la page dans un conteneur caché, puis de le mettre à jour et de le rendre visible en cas de besoin. De cette façon, une grande partie de votre balisage peut être pré-analysée par le navigateur et éviter d'être embourbé par JavaScript lors de son appel. J'espère que cela t'aides!
la source
Ce n'est pas la bonne réponse à la question mais je voudrais quand même partager ceci ...
Utiliser simplement
document.createElement('div')
et sauter JQuery améliorera considérablement les performances lorsque vous souhaitez créer de nombreux éléments à la volée et les ajouter au DOM.la source
Je pense que vous utilisez la meilleure méthode, bien que vous puissiez l'optimiser pour:
la source
Vous n'avez pas besoin des performances brutes d'une opération que vous effectuerez extrêmement rarement du point de vue du CPU.
la source
jQuery(html :: String)
méthode est parfaitement bien. Sauf si la situation est extrêmement inhabituelle, il est peu probable que l'on obtienne de meilleures performances perçues . Passez l'énergie d'optimisation sur les cas qui pourraient l'utiliser. De plus, jQuery est optimisé pour la vitesse de plusieurs façons. Faites des choses sensées avec lui, et faites confiance mais vérifiez-le pour être rapide.Vous devez comprendre que la signification des performances de création d'éléments n'est pas pertinente dans le contexte de l'utilisation de jQuery en premier lieu.
Gardez à l'esprit qu'il n'y a pas de véritable objectif de créer un élément à moins que vous ne l'utilisiez réellement.
Vous pouvez être tenté de tester les performances de quelque chose comme
$(document.createElement('div'))
vs$('<div>')
et d'obtenir de grands gains de performances en utilisant,$(document.createElement('div'))
mais ce n'est qu'un élément qui n'est pas encore dans le DOM.Cependant, à la fin de la journée, vous voudrez quand même utiliser l'élément afin que le vrai test devrait inclure f.ex. .ajouter à();
Voyons si vous testez les éléments suivants les uns contre les autres:
Vous remarquerez que les résultats varieront. Parfois, une façon est plus performante que l'autre. Et ce n'est que parce que la quantité de tâches en arrière-plan sur votre ordinateur change avec le temps.
Testez-vous ici
Donc, à la fin de la journée, vous voulez choisir la manière la plus petite et la plus lisible de créer un élément. De cette façon, au moins, vos fichiers de script seront les plus petits possibles. Probablement un facteur plus important sur le point des performances que la façon de créer un élément avant de l'utiliser dans le DOM.
la source
document.getElementById('target).appendChild(document.createElement('div'));
Quelqu'un a déjà fait un benchmark: jQuery document.createElement équivalent?
$(document.createElement('div'))
est le grand gagnant.la source
Un point est qu'il peut être plus facile de faire:
Ensuite, faites tout cela avec des appels jquery.
la source
J'utilise jquery.min v2.0.3. Il est préférable pour moi d'utiliser les éléments suivants:
comme suit:
Le temps de traitement du premier code est bien inférieur à celui du second code.
la source