Was ist der effizienteste Weg, HTML-Elemente mit jQuery zu erstellen?
Kürzlich habe ich auch eine Menge modales Fenster, pop-ups und was nicht, für welche ich verwendet jQuery. Die Methode, die ich verwendet, um erstellen Sie neue Elemente auf der Seite hat überwiegend wurde entlang der Linien von:
$("<div></div>");
Allerdings hab ich immer das Gefühl, dass dies nicht der beste oder die effizienteste Methode, dies zu tun. Was ist der beste Weg, um erstellen Sie Elemente in jQuery aus einer performance-Sicht?
Diese Antwort hat die benchmarks zu den Kommentaren unten.
Kommentar zu dem Problem
Experimentieren Sie mit entfernen von Stilen zu und sehen, ob das beschleunigt alles. Ich finde CSS-Anwendung und aktualisiert die Dinge verlangsamen, die auf großen Seiten für mich.
Beware of premature optimization -- wenn Sie nicht tun dies für Hunderte von DOM-Elemente an ein Zeit, oder mit SEHR alten Browsern, dann sind Sie wahrscheinlich nicht bemerken einen Unterschied in der browser-Leistung.
@Blazemonger Es war nicht so viel, dass ich erforderlich eine weitere effiziente Methode zum erstellen von DOM-Elementen, sondern die situation, in der ich war, machte mich darüber nachdenken, was die alternativen sind und wie effizient Sie auch sein mögen.
jQuery ist eine Bibliothek – Sie wird fast immer zu einem Mehraufwand Leistung Kosten, aus diesem Grund: es ist wie mit jemandem sprechen durch einen Dolmetscher. Es sei denn, Sie verwenden möchten raw JavaScript nutzen, wie schnell ist es zu schreiben $('<div>') und die Annahme der Leistung Treffer.
jsben.ch/#/bgvCV <= dieser benchmark sollte Ihre Frage beantworten
InformationsquelleAutor der Frage Darko Z | 2008-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benutze ich
$(document.createElement('div'));
Benchmarking zeigt diese Technik ist die Schnellste. Ich spekulieren, das ist, weil jQuery nicht identifizieren können, es als ein element, und erstellen Sie das element selbst.Sollten Sie wirklich laufen benchmarks mit verschiedenen Javascript-engines und Wiegen Sie Ihr Publikum mit den Ergebnissen. Eine Entscheidung von dort.
InformationsquelleAutor der Antwort strager
persönlich würde ich vorschlagen (für die Lesbarkeit):
einige zahlen auf die Vorschläge, die bisher (safari 3.2.1 /mac os x):
InformationsquelleAutor der Antwort Owen
Frage:
Antwort:
Da es über
jQuery
dann denke ich ist es besser diese zu verwenden, (sauber) - Ansatz (Verwendung)DEMO.
Diese Weise können Sie auch verwenden, event-Handler für das jeweilige element, wie
DEMO.
Aber, wenn Sie sind den Umgang mit vielen dynamischen Elementen, sollten Sie vermeiden, hinzufügen von Ereignis -
handlers
insbesondere element, verwenden Sie stattdessen einen Delegierten event-handler, wieDEMO.
Also, wenn Sie erstellen und fügen Sie Hunderte von Elementen gleichen Klasse, D. H. (
myClass
) dann weniger Speicher verbraucht wird, für event-handling, da nur ein handler wird da sein, um die Arbeit zu tun für alle Elemente dynamisch eingefügt.Update : Da können wir verwenden folgenden Ansatz erstellen Sie ein dynamisches element
Aber die
size
Attribut kann nicht eingestellt werden mit diesem Ansatz unter VerwendungjQuery-1.8.0
oder später und hier ist eine alte Fehlerbericht, Blick auf dieses Beispiel mitjQuery-1.7.2
was zeigt, dasssize
Attribut30
mit obigen Beispiel, aber mit der gleichen Vorgehensweise können wir nicht festlegensize
Attribut mitjQuery-1.8.3
, hier ist ein non-working fiddle. So, um diesize
- Attribut, können wir verwenden folgenden AnsatzOder diese
Können wir pass
attr/prop
wie ein Kind-Objekt, aber es funktioniert injQuery-1.8.0 and later
Versionen überprüfen dieses Beispiel aber es wird nicht funktionieren injQuery-1.7.2 or earlier
(nicht getestet in allen früheren Versionen).BTW, entnommen
jQuery
bug-reportRieten Sie verwenden folgenden Ansatz (Werke, die in früheren als gut, getestet in
1.6.4
)So, ist es besser, diesen Ansatz verwenden, IMO. Dieses update ist gemacht, nachdem ich gelesen/gefunden diese Antwort und in dieser Antwort zeigt, dass, wenn Sie
'Size'(capital S)
statt'size'
dann wird es nur funktionieren, auch inversion-2.0.2
Lesen Sie auch über prop, denn es ist ein Unterschied,
Attributes vs. Properties
variiert durch-Versionen.InformationsquelleAutor der Antwort The Alpha
Eigentlich, wenn du tust
$('<div>')
, jQuery wird auchdocument.createElement()
.(Werfen Sie einen Blick auf Zeile 117).
Gibt es einige function-call overhead, aber es sei denn, die Leistung ist entscheidend (Sie sind Hunderte [Tausende] von Elementen), gibt es nicht viel Grund, um wieder zu klarem DOM.
Nur die Erstellung der Elemente für eine neue Webseite ist wohl eine Falle, in der Sie die besten stick auf der jQuery Weg, Dinge zu tun.
InformationsquelleAutor der Antwort edwin
Wenn Sie eine Menge von HTML-Inhalten (mehr als nur ein einzelnes div), könnte man darüber nachdenken, den HTML-Code in die Seite in einem versteckten container, dann aktualisieren Sie es und machen es sichtbar, wenn Sie benötigt wird. Auf diese Weise, einen großen Teil des markup kann im Voraus analysiert die browser und vermeiden, sich zu verzetteln, indem Sie JavaScript, wenn Sie aufgerufen. Hoffe, das hilft!
InformationsquelleAutor der Antwort Collin Allen
Dies ist nicht die richtige Antwort für die Frage, aber trotzdem möchte ich dies teilen kann...
Einfach mit
document.createElement('div')
und überspringen von JQuery verbessert die Leistung viel, wenn Sie wollen, um viele Elemente auf, die Fliegen und Anhängen an DOM.InformationsquelleAutor der Antwort Irshad
Ich glaube, du bist mit die beste Methode, aber man könnte es optimieren:
InformationsquelleAutor der Antwort tvanfosson
Brauchen Sie nicht raw-Leistung von einer operation, die Sie durchführen wird äußerst selten aus der Sicht der CPU.
InformationsquelleAutor der Antwort yfeldblum
Müssen Sie verstehen, dass die Bedeutung der Erstellung eines Elements die Leistung ist irrelevant im Zusammenhang mit der Verwendung von jQuery in den ersten Platz.
Im Hinterkopf behalten, es gibt keinen wirklichen Zweck, indem es ein element, es sei denn, Sie sind eigentlich Los, um es zu benutzen.
Sie könnten versucht sein, performance-test, so etwas wie
$(document.createElement('div'))
vs.$('<div>')
und bekommen große performance-Gewinne von über$(document.createElement('div'))
aber das ist nur ein element, das nicht in der DOM noch.Jedoch am Ende des Tages, werden Sie wollen, um das element sowieso nicht so der wirkliche test beinhalten sollte f.ex. .appendTo();
Let ' s sehen, wenn Sie testen Sie die folgenden gegeneinander:
Werden Sie feststellen, die Ergebnisse variieren. Manchmal ein Weg ist, eine bessere Leistung als die anderen. Und dies nur, weil die Menge von hintergrund-tasks, die auf Ihrem computer im Laufe der Zeit ändern.
Testen Sie sich hier
So, in der Ende des Tages, Sie wollen, um die kleinsten und wichtigsten lesbaren Art und Weise der Erstellung des Elements. So, zumindest, Ihre Skript-Dateien werden mit der kleinsten möglichen. Wahrscheinlich ein bedeutender Faktor auf die performance zeigen, als die Möglichkeit zu schaffen, ein element, bevor Sie es in die DOM.
InformationsquelleAutor der Antwort Jani Hyytiäinen
Jemand hat bereits einen benchmark:
jQuery Dokument,.createElement äquivalent?
$(document.createElement('div'))
ist der große Gewinner.InformationsquelleAutor der Antwort Erel Segal-Halevi
Einem Punkt ist, kann es einfacher sein, zu tun:
Dann tun alle, die mit jquery-Aufrufe.
InformationsquelleAutor der Antwort Tobiah
Ich bin mit jquery.min v2.0.3 .
Es ist für mich besser zu bedienen ist folgende:
wie folgt:
Bearbeitungszeit der erste code ist viel niedriger als der zweite code.
InformationsquelleAutor der Antwort Marcel GJS