2017-10-12 1 views
2

Ich habe eine React-Anwendung, die eine Menge Daten verarbeiten muss. Insgesamt ist es eine einfache Anwendung:ReactJS eine Menge Daten im Zustand behandeln

  • -Header mit ein paar Links
  • Suchleiste
  • Tabelle

Der Fang wird, je nachdem, was gesucht wird ... der Tisch muss Anzeige von bis zu 1.000 Zeilen nach etwa 100 Spalten. Wenn die HTTP-Anforderung diese Daten zurückgibt und den Status eingibt, wird die Anwendung ziemlich unbrauchbar. Jeder andere Versuch, den Status zu aktualisieren, nachdem er diese Daten enthält, dauert entweder ewig oder führt zum Absturz des Browsers. Selbst wenn ich die Tabelle so beschränke, dass 20 Zeilen x 100 Spalten angezeigt werden, ist die Statusaktualisierung zwar deutlich schneller, aber dennoch zu aktualisieren.

Ich habe versucht, das Internet zu durchsuchen, um eine gute Lösung zu finden und sind kurz gekommen, so dass alle Ideen/Hilfe/Vorschläge willkommen sind. Wenn Redux hilft, habe ich kein Problem, das zu implementieren, ich will einfach nicht meine Zeit verschwenden, wenn es keinen Gewinn gibt.

+0

Ich sehe das Rendering ist die Verlangsamung. Ich habe es nicht selbst verwendet, aber https://bvaughn.github.io/react-virtualized/#/components/List hat eine konsistente Leistung bei 1000 Zeilen +. Das Beispiel hat nur eine minimale Anzahl von Spalten.Aber genauso wie sie die sichtbaren Zeilen berechnen und nur rendern, können Sie auch die sichtbaren Spalten berechnen und nur rendern. – jmathew

+0

Also verwende ich derzeit https://react-table.js.org/#/story/100k-rows-w-pivoting-sub-components für die Tabelle. Die Tabelle selbst ist in Ordnung, aber wenn ich versuche, die Suchleiste einzugeben (die den Status onChange aktualisiert), nachdem die Daten im Status/dom sind, dauert es ewig, bis sich die Eingabe ändert (Statusaktualisierung) – erichardson30

+0

Kann hinzugefügt werden etwas Code für die Komponente? Vor allem die render() und der Netzwerkanruf? – jmathew

Antwort

2

Sie werden wahrscheinlich die gesamte Tabelle zusammen mit der Suchleiste neu rendern, wenn Sie sie eingeben. Versuchen Sie vielleicht, die Tabelle in eine Unterkomponente zu setzen, die shouldComponentUpdate() implementiert. Sollen die Tabellendaten dynamisch aktualisiert werden, wenn Sie ein Zeichen in die Eingabe eingeben? Das könnte teuer sein, Sie könnten auch erwägen, die Tabelle nur neu zu rendern, wenn ein Benutzer auf die Schaltfläche "Suchen" bei der Eingabe klickt.

Anstatt um den heißen Brei herumzuprobieren, um herauszufinden, ob es sich um ein Rendering-Problem handelt, empfehle ich die Verwendung des React performance tools *. Benchmarking hat a solid blog post, die durch den Prozess der Leistung Debugging in React läuft, aber die Magie ist Perf.printWasted(). Es zeigt Ihnen, wie viel Zeit für das erneute Rendern von Komponenten aufgewendet wurde, die nach dem Rendern gleich waren (z. B. Ihre Tabelle, wenn Sie nur die Texteingabe ändern). Prüfschritte:

  1. der Konsole ausführen: Perf.start()
  2. geben Sie Ihre Eingabe, im Idealfall nur einem Tastendruck
  3. Konsole: Perf.stop()
  4. Konsole: Perf.printWasted()

Diese Methode ist super schmerzlos, aber Sie können auch use the Chrome profiling tools die gleichen Informationen herausfinden.

* Ich habe gerade herausgefunden, dass sie im heiß reagierten React 16 veraltet sind, aber Sie verwenden wahrscheinlich immer noch eine 15.x-Variante, die gut funktioniert.

Auch +1 für reaktiv-virtualisiert! Es ist ausgezeichnet, unterstützt viele Spalten und Layouts.

1

Wenn ich dich richtig verstanden habe, ist dein Problem nicht die Menge der Daten - Problem im DOM-Rendering.

Ich denke, die beste Lösung für Sie wird sein, nur sichtbaren Teil der Tabelle zu rendern. Versuchen Sie zum Beispiel, this library oder ähnliches zu verwenden.

+0

Also verwende ich derzeit https://react-table.js.org/#/story/100k-rows-w-pivoting-sub-components für die Tabelle. Die Tabelle selbst ist in Ordnung, aber wenn ich versuche, die Suchleiste einzugeben (die den Status onChange aktualisiert), nachdem die Daten im Zustand/dom sind, dauert es ewig, bis sich die Eingabe ändert (Statusaktualisierung) – erichardson30

+0

Ich bin nicht sicher, aber dieses Problem https://github.com/react-tools/react-table/issues/403 hat ein Beispiel, wie man 'react-table' mit' AutoSizer' Komponente von 'react-virtualized' verwendet. – uselesssmile

Verwandte Themen