Auf einer Webseite habe ich eine ziemlich große Liste von Gegenständen (sagen wir, Produktkarten, jedes enthält Bild und Text) - etwa 1000 von ihnen. Ich möchte diese Liste auf dem Client filtern (nur die Elemente, die nicht herausgefiltert werden, sollten angezeigt werden), aber es gibt ein Rendering-Leistungsproblem. Ich wende einen sehr schmalen Filter an und es bleiben nur noch 10-20 Teile übrig, dann kündige ich es ab (damit alle Elemente wieder angezeigt werden müssen), und der Browser (Chrome auf sehr nettem Rechner) legt für ein oder zwei Sekunden auf.Wie kann man große Mengen von DOM-Elementen mit Javascript optimal darstellen?
ich wieder machen die Liste folgende Routine:
for (var i = 0, l = this.entries.length; i < l; i++) {
$(this.cls_prefix + this.entries[i].id).css("display", this.entries[i].id in dict ? "block" : "none")
}
dict ist der Hash der erlaubten Elemente Ide
Diese Funktion selbst sofort ausgeführt wird, ist es, dass Rendering auflegt. Gibt es eine optimalere Methode zum erneuten Rendern als die Eigenschaft "display" von DOM-Elementen zu ändern?
Vielen Dank für Ihre Antworten im Voraus.
Sie sind überrascht Das erneute Rendern von 1000 Elementen dauert 1-2 Sekunden? Da ich bezweifle, dass 1000 Elemente in jedem Moment sichtbar sind, sollten Sie vielleicht mit den sichtbaren Elementen umgehen und dann im Hintergrund arbeiten, um den Rest verfügbar zu machen (50 pro Durchgang mit setTimeout() zwischen jedem Batch, um den Browser am Leben zu halten). Oder vielleicht solltest du nur neu rendern, wenn sie tatsächlich durch Scrollen sichtbar werden. Es hilft Ihnen auch nicht, 1000 separate Selektor-Operationen auszuführen, die jeweils das gesamte DOM durchsuchen müssen. – jfriend00
Geben Sie uns ein jsFiddle zur Bearbeitung und ich bin mir sicher, dass wir die Switchover-Leistung um den Faktor 10x verbessern konnten. Es gibt eine Menge saftiges Fett in diesem Code. – jfriend00