jQuerys $ .data () und DOM Objekteigenschaft

9

Ich musste vor kurzem einige Daten an dynamisch erstelltes LI elements anhängen. In meinem ersten Fall habe ich .data() auf eine Art wie

verwendet %Vor%

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

%Vor%

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

%Vor%

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.

    
jAndy 04.08.2010, 16:28
quelle

3 Antworten

3

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.

    
Ryan Tenney 04.08.2010, 16:50
quelle
2

Beim Versuch, einem NodeList-Objekt benutzerdefinierte Eigenschaften hinzuzufügen, kann der Browser (IE) dies unterbinden. Siehe: Ссылка

    
Tim 25.01.2011 15:44
quelle
0

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 $.data versteckte Elemente zurückzugreifen. Zum Glück hatte ich nicht mehr als 500 Elemente, aber mehr wie fünf oder sechs.

    
karim79 04.08.2010 16:50
quelle

Tags und Links