In letzter Zeit habe ich viele modale Fenster-Popups erstellt und was nicht, für die ich jQuery verwendet habe. Die Methode, mit der ich die neuen Elemente auf der Seite erstellt habe, war überwiegend wie folgt:
$("<div></div>");
Ich habe jedoch das Gefühl, dass dies nicht die beste oder effizienteste Methode ist. Was ist der beste Weg, um Elemente in jQuery aus Sicht der Leistung zu erstellen?
Diese Antwort enthält die Benchmarks für die folgenden Vorschläge.
javascript
jquery
html
dom
Darko Z.
quelle
quelle
Antworten:
Ich benutze
$(document.createElement('div'));
Benchmarking zeigt, dass diese Technik die schnellste ist. Ich spekuliere, weil jQuery es nicht als Element identifizieren und das Element selbst erstellen muss.Sie sollten wirklich Benchmarks mit verschiedenen Javascript-Engines ausführen und Ihre Zielgruppe mit den Ergebnissen abwägen. Treffen Sie von dort aus eine Entscheidung.
quelle
appendTo
, ... Da die Kommentare offensichtlich falsch waren, habe ich sie entfernt.persönlich würde ich vorschlagen (zur besseren Lesbarkeit):
Einige Zahlen zu den bisherigen Vorschlägen (Safari 3.2.1 / Mac OS X):
quelle
Frage:
Antworten:
Da es ungefähr
jQuery
dann ist, denke ich, ist es besser, diesen (sauberen) Ansatz zu verwenden (den Sie verwenden)DEMO.
Auf diese Weise können Sie sogar Ereignishandler für das jeweilige Element wie verwenden
DEMO.
Wenn Sie jedoch mit vielen dynamischen Elementen arbeiten, sollten Sie das Hinzufügen eines Ereignisses
handlers
in einem bestimmten Element vermeiden. Stattdessen sollten Sie einen delegierten Ereignishandler wie verwendenDEMO.
Wenn Sie also Hunderte von Elementen mit derselben Klasse erstellen und anhängen, dh (
myClass
), wird weniger Speicher für die Ereignisbehandlung benötigt, da nur ein Handler für alle dynamisch eingefügten Elemente zur Verfügung steht.Update: Da wir den folgenden Ansatz verwenden können, um ein dynamisches Element zu erstellen
Das
size
Attribut kann jedoch nicht mit diesem AnsatzjQuery-1.8.0
oder später festgelegt werden. Hier ist ein alter Fehlerbericht . Sehen Sie sich dieses Beispiel an ,jQuery-1.7.2
das zeigt, dass dassize
Attribut auf30
das obige Beispiel eingestellt ist, aber denselben Ansatz verwendet, mit dem wir dassize
AttributjQuery-1.8.3
hier nicht festlegen können ist eine nicht funktionierende Geige . Um dassize
Attribut festzulegen, können wir den folgenden Ansatz verwendenOder dieses
Wir können
attr/prop
als untergeordnetes Objekt übergeben, aber es funktioniert injQuery-1.8.0 and later
Versionen. Überprüfen Sie dieses Beispiel, aber es funktioniert nicht injQuery-1.7.2 or earlier
(nicht in allen früheren Versionen getestet).Übrigens, aus dem
jQuery
Fehlerbericht entnommenSie rieten zu folgendem Ansatz ( funktioniert auch in früheren , getestet in
1.6.4
)Es ist also besser, diesen Ansatz zu verwenden, IMO. Dieses Update wird , nachdem ich gelesen / gefunden diese Antwort und in dieser Antwort zeigt , dass , wenn Sie verwenden ,
'Size'(capital S)
anstatt'size'
es dann wird nur gut funktionieren , auch inversion-2.0.2
Lesen Sie auch über Requisiten , da es einen Unterschied gibt
Attributes vs. Properties
, der von Version zu Version unterschiedlich ist.quelle
$('<div>', {...})
Sie ein Objekt übergeben, das alle Attribute enthält, und in dem$('<div>').attr({...})
Sie ein Element ohne Attribute erstellen, die Attribute jedochattr()
später mithilfe der Methode festlegen.jQuery.com
Website könnte hilfreich sein @RafaelRuizTabares, oder googeln Sie es :-)Wenn Sie dies tun
$('<div>')
, wird jQuery auch verwendetdocument.createElement()
.(Schauen Sie sich einfach Zeile 117 an. )
Es gibt einen gewissen Aufwand für Funktionsaufrufe, aber wenn die Leistung nicht kritisch ist (Sie erstellen Hunderte [Tausende] von Elementen), gibt es nicht viel Grund, auf einfaches DOM zurückzugreifen .
Das Erstellen von Elementen für eine neue Webseite ist wahrscheinlich ein Fall, in dem Sie sich am besten an die jQuery- Methode halten.
quelle
Wenn Sie viel HTML-Inhalt haben (mehr als nur ein einziges Div), können Sie den HTML-Code in die Seite in einem versteckten Container einbauen, ihn dann aktualisieren und bei Bedarf sichtbar machen. Auf diese Weise kann ein großer Teil Ihres Markups vom Browser vorab analysiert werden, um zu vermeiden, dass JavaScript beim Aufrufen ins Stocken gerät. Hoffe das hilft!
quelle
Dies ist nicht die richtige Antwort auf die Frage, aber ich möchte dies trotzdem teilen ...
Wenn Sie nur
document.createElement('div')
JQuery verwenden und überspringen, wird die Leistung erheblich verbessert, wenn Sie viele Elemente im laufenden Betrieb erstellen und an DOM anhängen möchten.quelle
Ich denke, Sie verwenden die beste Methode, obwohl Sie sie optimieren könnten, um:
quelle
Sie benötigen keine Rohleistung für einen Vorgang, den Sie aus Sicht der CPU äußerst selten ausführen.
quelle
jQuery(html :: String)
Methode ist vollkommen in Ordnung. Wenn die Situation nicht äußerst ungewöhnlich ist, ist es unwahrscheinlich, dass eine besser wahrgenommene Leistung erzielt wird . Geben Sie die Optimierungsenergie für die Fälle aus, in denen sie verwendet werden könnten. Darüber hinaus ist jQuery in vielerlei Hinsicht auf Geschwindigkeit optimiert. Machen Sie vernünftige Dinge damit und vertrauen Sie darauf, dass es schnell ist.Sie müssen verstehen, dass die Bedeutung der Leistung bei der Elementerstellung für die Verwendung von jQuery in erster Linie irrelevant ist.
Denken Sie daran, dass es keinen wirklichen Zweck gibt, ein Element zu erstellen, es sei denn, Sie werden es tatsächlich verwenden.
Sie könnten versucht sein, Leistungstests wie
$(document.createElement('div'))
vs. zu testen$('<div>')
und durch die Verwendung große Leistungssteigerungen zu erzielen,$(document.createElement('div'))
aber das ist nur ein Element, das noch nicht im DOM enthalten ist.Am Ende des Tages sollten Sie das Element jedoch trotzdem verwenden, sodass der eigentliche Test f.ex enthalten sollte. .Anhängen();
Mal sehen, ob Sie Folgendes gegeneinander testen:
Sie werden feststellen, dass die Ergebnisse variieren. Manchmal ist ein Weg besser als der andere. Dies liegt nur daran, dass sich die Anzahl der Hintergrundaufgaben auf Ihrem Computer im Laufe der Zeit ändert.
Testen Sie sich hier
Letztendlich möchten Sie also die kleinste und am besten lesbare Methode zum Erstellen eines Elements auswählen. Auf diese Weise werden zumindest Ihre Skriptdateien so klein wie möglich. Wahrscheinlich ein wichtigerer Faktor für den Leistungspunkt als die Art und Weise, wie ein Element erstellt wird, bevor Sie es im DOM verwenden.
quelle
document.getElementById('target).appendChild(document.createElement('div'));
Jemand hat bereits einen Benchmark erstellt: jQuery document.createElement-Äquivalent?
$(document.createElement('div'))
ist der große Gewinner.quelle
Ein Punkt ist, dass es einfacher sein kann:
Dann, um all das mit jquery-Aufrufen zu tun.
quelle
Ich benutze jquery.min v2.0.3. Es ist für mich besser, Folgendes zu verwenden:
wie folgt:
Die Verarbeitungszeit des ersten Codes ist viel kürzer als die des zweiten Codes.
quelle