Angularjs langsam mit einem Tisch

8

Ich habe einen Tisch mit ungefähr 30 Reihen und ungefähr 10 Spalten. Die Zeilen sind ein Teilbereich einer viel größeren Menge (was ich manuell mache, um ein großes DOM zu vermeiden). Die Spalten werden in einer Liste wie [{name: "firstname", width: 200}, {name: "married", type: "bool"}] gespeichert, was eine gewisse Flexibilität ermöglicht (zB das Anzeigen der Eigenschaft "verheiratet" als Kontrollkästchen).

Also gibt es nur ungefähr 300 Felder, aber der Digest-Zyklus dauert ungefähr eine Sekunde (auf meiner i5-2400 CPU @ 3.10GHz).

Ich habe Probleme, die Batarang-Performance-Seite zu interpretieren. Es sagt

%Vor%

Die Bedeutung der (spärlich benannten) Variablen ist mir klar:

  • e steht für Entität, d. h. Tabellenzeile.
  • p steht für Eigenschaft und tritt nur außerhalb der Tabelle auf.
  • c steht für Spalte.
  • e[c.name] steht für den Feldinhalt (von der Entität e die Eigenschaft, die von c benannt wird).

Aber die Leistungszahlen machen wenig Sinn:

  • p.name wird nur vielleicht 10 mal benutzt, wie kann es so lange dauern?
  • c.name | translate kommt auch nur 10 mal vor (in der Kopfzeile), wie kann es so lange dauern?

Ich kenne {::a_once_only_bound_expression} , und ich habe es versucht, aber ohne viel Erfolg. Was ich eigentlich brauche, ist folgendes:

  • Wenn sich c ändert, erstellen Sie die gesamte Tabelle neu (dies geschieht nur ausnahmsweise, deshalb interessiert mich die Geschwindigkeit nicht).
  • Wenn sich e ändert, erstellen Sie die gesamte Zeile neu (wenn eine Änderung erfolgt, dann nur in einer einzelnen Zeile).

Irgendeine Möglichkeit, dies zu erreichen?

Eine Lösungsidee

Ich denke, was ich brauche, könnte mit einer Direktive erreicht werden, die nach dem Rendern alle Winkelstücke aus der Reihe entfernt:

  • lösche alle untergeordneten Bereiche
  • mit all ihren Uhren
  • Behalte aber alle HTML- und Listener

Ich könnte bei Bedarf eine einzelne Uhr pro Zeile hinzufügen, die für das Repaint zuständig ist.

Macht es Sinn?

Aktualisieren

Ich war ziemlich damit beschäftigt, an der Anwendung zu arbeiten - andere Dinge als die Leistung zu verbessern. Ich hatte sehr viel Glück und bekam etwas Leistung als Bonus. Dann habe ich die Seiten ein wenig vereinfacht und die Geschwindigkeit ist jetzt akzeptabel. Zumindest für jetzt.

Immer noch:

  • Ich traue den obigen Batarang-Leistungswerten nicht zu.
  • Ich bin immer noch neugierig, wie ich die obige Lösungsidee umsetzen kann und ob es sinnvoll ist.
maaartinus 26.08.2016, 05:38
quelle

1 Antwort

0

Vielleicht möchten Sie NgTable suchen, das Eingaben von json-Daten als Zeilen und Spalten enthält, die Ihr Leistungsproblem möglicherweise ebenfalls lösen, empfehle ich Checkout dafür

    
Tamer Durgun 12.07.2017 14:56
quelle

Tags und Links