Ich musste vor kurzem einige Daten an dynamisch erstelltes LI elements
anhängen. In meinem ersten Fall habe ich .data()
auf eine Art wie
das .. war schrecklich langsam. Diese Logik passiert in einer Schleife, die leicht bis zu 500 + Items wachsen kann, es dauerte ewig! Manchmal hat es sogar den Javascript-Ausführungszeitraum gebrochen.
Also habe ich mich in $.data()
geändert. Irgendwie ist das Anfügen von Daten an ein Objekt wie 8x schneller als über den Methodenaufruf .data()
. So, jetzt sah es aus wie
Das war / ist zwar schneller, aber trotzdem dauerte es 3-4 Sekunden (!), um alle meine Elemente aufzubauen (In meinem echten Code gibt es 6 Aufrufe von $ .data pro Element).
Also ich war wirklich fest damit, ich fragte mich, warum zum Teufel, .data()
oder $.data()
überhaupt zu verwenden? Ich könnte einfach meine Daten an die DOM object
anhängen. Also habe ich
Voila, wow zu meinem Schock, das war unglaublich schnell! Ich konnte nicht glauben, dass das ohne Nachteile so gut lief. Darum geht es in meiner Frage eigentlich. Ich habe bisher keinen Nachteil für diese Technik im Netz gefunden. Es gibt Lesezugriffe auf zirkuläre Referenzen , die Sie auf diese Weise erstellen können, aber AFAIK "nur" auf IEs und nur, wenn Sie sich auf objects
beziehen.
Irgendwelche Gedanken Experten?
update
Danke für die guten Kommentare und Postings. Kurzes Update @patrick dw:
Sie haben recht, ich habe die unterlegende DOM element
übergeben, wenn $.data()
verwendet wurde. Es funktioniert nicht einmal mit jQuery-Objekten, zumindest nicht wie erwartet.
Die Idee, ein Objekt zu benutzen und es durch $.date()
zu geben, hatte ich selbst, aber dann war ich so geschockt über den Leistungsunterschied, dass ich mich entschieden habe, die .data()
-Methode wie immer zu ignorieren.
Bei Zirkelverweisen haben Sie Recht, das ist kein Problem außerhalb des IE, und im IE wird es nur dann zum Problem, wenn JavaScript einen Verweis auf ein DOM-Objekt und ein JS-Objekt hat einer der Eigenschaften des DOM-Objekts zugewiesen. Ich glaube, dass dies gelöst werden kann, indem einfach irgendwelche Verweise in JS auf das DOM-Objekt aufgehoben werden.
Die Methode $().data()
ist ein zu komplizierter Wrapper für $.data()
(siehe jQuery.fn.data
: Ссылка , die wiederum jQuery.data
aufruft: Ссылка
In diesem Fall macht die Methode $().data('foo', 'bar')
nicht viel mehr als el.foo = 'bar'
. Mach was am schnellsten ist.
Diese könnten helfen:
Und lesen Sie das Folgende über die Verwendung einer benutzerdefinierten DTD:
Kurz gesagt, glaube ich nicht, dass Sie Probleme mit benutzerdefinierten Attributen haben werden. Die meisten vernünftigen / aktuellen Browser werden damit klar kommen. Ich werde sagen, dass ich Probleme mit einer Webanwendung hatte, die ich für MobileSafari entwickelt habe, was mich dazu zwang, auf versteckte Elemente zurückzugreifen. Zum Glück hatte ich nicht mehr als 500 Elemente, aber mehr wie fünf oder sechs. $.data
Tags und Links javascript html jquery dom