JavaScript-Datenraster für Millionen von Zeilen [geschlossen]


225

Ich muss dem Benutzer eine große Anzahl von Datenzeilen (dh Millionen von Zeilen) in einem Raster mithilfe von JavaScript präsentieren.

Der Benutzer sollte nicht Seiten sehen oder nur begrenzte Datenmengen gleichzeitig anzeigen.

Vielmehr sollte es so aussehen, als ob alle Daten verfügbar sind.

Anstatt die Daten auf einmal herunterzuladen, werden kleine Blöcke heruntergeladen, sobald der Benutzer zu ihnen kommt (dh durch Scrollen durch das Raster).

Die Zeilen werden nicht über dieses Frontend bearbeitet, daher sind schreibgeschützte Raster zulässig.

Welche in JavaScript geschriebenen Datenraster gibt es für diese Art von nahtlosem Paging?


1
Ich habe die Antwort von jqgrid nicht akzeptiert, da sie bei großen Datenmengen anscheinend fehlschlägt ... Irgendwelche anderen Vorschläge? Was ist mit ext-livegrid.com ?
Rüdiger

6
Schreibe dein Eigenes. Ich bin mir sicher, dass die anderen ersticken, weil sie einfach weiter an das DOM anhängen. Ich denke, Sie brauchen eine Lösung, die Zeilen entfernt, wenn sie vom Bildschirm scrollen . Das ist der einzige Weg. Sie können einfach nicht eine Million Tabellenzeilen im DOM haben und erwarten, dass jeder Browser in jeder Umgebung nahtlos angezeigt und gescrollt wird. Sei vernünftig.
Josh Stodola

2
@ Rudiger: SlickGrid unterstützt jetzt eine unbegrenzte Anzahl von Zeilen nativ. Siehe github.com/mleibman/SlickGrid/tree/unlimited-rows . Sobald dies gründlich getestet wurde, wird es in den Hauptzweig integriert.
Tin

10
Und es tut mir leid, für welche Firma Sie auch immer arbeiten. Zu Ihrer Information: Ein 1920 x 1080-Bildschirm mit nur 1 Million angezeigten Zeilen springt 20 Zeilen pro Pixel Bewegung in der Bildlaufleiste. Machen Sie einige Usability-Tests, anstatt Ihre Zeit zu verschwenden.
Sleeper Smith

2
Diese Frage und ihre beiden wichtigsten Antworten sind (zumindest) äußerst nützlich. Es könnte einige Antworten von geringer Qualität angezogen haben, aber diese Frage sollte keinesfalls geschlossen werden. Die Verwendung von SlickGrid zur Lösung dieses Problems kann Menschen viele, viele Stunden Ärger und schwierige Codierung ersparen, wenn sie versuchen, dies für sich selbst erneut zu implementieren.
Sam Watkins

Antworten:


190

( Haftungsausschluss: Ich bin der Autor von SlickGrid )

UPDATE Dies wurde jetzt in SlickGrid implementiert .

Unter http://github.com/mleibman/SlickGrid/issues#issue/22 finden Sie eine fortlaufende Diskussion darüber, wie SlickGrid mit einer größeren Anzahl von Zeilen funktioniert.

Das Problem ist, dass SlickGrid die Bildlaufleiste selbst nicht virtualisiert - die Höhe des scrollbaren Bereichs wird auf die Gesamthöhe aller Zeilen festgelegt. Die Zeilen werden weiterhin hinzugefügt und entfernt, während der Benutzer einen Bildlauf durchführt, der Bildlauf selbst wird jedoch vom Browser ausgeführt. Dies ermöglicht es, sehr schnell und dennoch reibungslos zu sein (Onscroll-Ereignisse sind notorisch langsam). Die Einschränkung besteht darin, dass die CSS-Engines der Browser Fehler / Einschränkungen aufweisen, die die potenzielle Höhe eines Elements begrenzen. Für IE sind das zufällig 0x123456 oder 1193046 Pixel. Für andere Browser ist es höher.

Es gibt eine experimentelle Problemumgehung im Zweig "Largenum-Fix", die diese Grenze erheblich erhöht, indem der scrollbare Bereich mit "Seiten" gefüllt wird, die auf 1 M Pixel Höhe eingestellt sind, und dann die relative Positionierung innerhalb dieser Seiten verwendet wird. Da die Höhenbeschränkung in der CSS-Engine anders und deutlich niedriger zu sein scheint als in der eigentlichen Layout-Engine, ergibt sich eine viel höhere Obergrenze.

Ich bin immer noch auf der Suche nach einer Möglichkeit, eine unbegrenzte Anzahl von Zeilen zu erreichen, ohne den Leistungsvorteil aufzugeben, den SlickGrid derzeit gegenüber anderen Implementierungen bietet.

Rüdiger, können Sie näher erläutern, wie Sie das gelöst haben?


1
Ich habe festgestellt, dass SlickGrid am attraktivsten ist - besonders wenn man mit jQuery arbeitet. Glückwunsch! (Besonders für die großartige Einstellung und Ausdauer.) :-)
Andras Vass

Ich versuche, slickgrid zu verwenden, um Excel-Header anzuzeigen, und ich sehe, dass slickgrid bei zu vielen Spalten nur das Scrollen von Zeilen und nicht von Spalten optimiert. Mir ist auch aufgefallen, dass slickgrid bei mehr als 120 Spalten die neuen Zeilen in eine neue Zeile setzt. Kann die maximale Anzahl von Zeilen irgendwo in den Dateien festgelegt werden?
Oneiros

1
SlickGrid v2.1 verwendet virtuelles Scrollen für Spalten und Zeilen. Außerdem wurde das Problem mit überlaufenden Spalten behoben.
Tin

@Tin - Dies ähnelt meinem Ansatz; Ich war meiner Zeit um Jahre voraus! "Ein Lazy-Block-Layout-Grundelement zum Erstellen eines unendlichen Bildlaufs in Webanwendungen." docs.google.com/document/d/…
Rüdiger

@ Rudiger Ja, ich habe das vor ungefähr einem Monat in der Blink-Gruppe gesehen, aber ich bin mir nicht ganz sicher, wie das in das Bild passt. Das faule Layout arbeitet mit Elementen, die tatsächlich im DOM vorhanden sind, was wir nicht wirklich tun können. Bitte näher erläutern :)
Tin

84

https://github.com/mleibman/SlickGrid/wiki

" SlickGrid verwendet virtuelles Rendering, damit Sie problemlos mit Hunderttausenden von Elementen arbeiten können, ohne die Leistung zu beeinträchtigen. Tatsächlich gibt es keinen Unterschied in der Leistung zwischen der Arbeit mit einem Raster mit 10 Zeilen und 100'000 Zeilen. "

Einige Highlights:

  • Adaptives virtuelles Scrollen (Hunderttausende von Zeilen verarbeiten)
  • Extrem schnelle Rendergeschwindigkeit
  • Hintergrund-Post-Rendering für reichere Zellen
  • Konfigurierbar und anpassbar
  • Vollständige Tastaturnavigation
  • Spaltengröße ändern / neu anordnen / anzeigen / ausblenden
  • Autososizing & Force-Fit
  • Steckbare Zellenformatierer und -editoren
  • Unterstützung für das Bearbeiten und Erstellen neuer Zeilen. "von mleibman

Es ist kostenlos (MIT-Lizenz). Es verwendet jQuery.


Es funktioniert gut bis genau 131.001 Zeilen ... Das heißt, es gibt eine Codezeile wie diese: data.length = Math.min(131000, parseInt(resp.total));... Und natürlich die aus einem Grund fest codierte :(
Rüdiger

6
Es hat ein wenig Arbeit gekostet, aber ich habe einige Änderungen vorgenommen, um das Raster unabhängig von der Länge des dataArrays zu machen. Es ist ein Kludge, aber ich habe die Antworten, die ein bigdataArray füllen, und die kleineren ziehen dataaus dem bigdataArray. Der Rest des Programms verwendet das kleinere Datenarray, mit Ausnahme der Bildlaufleistenmessung und einiger anderer Stellen, die jetzt für eine große Anzahl von Zeilen unbegrenzt sind. Alles in allem war es viel einfacher als meine eigenen zu schreiben.
Rüdiger

8
@ Rudiger: SlickGrid unterstützt jetzt eine unbegrenzte Anzahl von Zeilen nativ. Siehe github.com/mleibman/SlickGrid/tree/unlimited-rows . Sobald dies gründlich getestet wurde, wird es in den Hauptzweig integriert.
Tin

Ich versuche, slickgrid zu verwenden, um Excel-Header anzuzeigen, und ich sehe, dass slickgrid bei zu vielen Spalten nur das Scrollen von Zeilen und nicht von Spalten optimiert. Mir ist auch aufgefallen, dass slickgrid bei mehr als 120 Spalten die neuen Zeilen in eine neue Zeile setzt. Kann die maximale Anzahl von Zeilen irgendwo in den Dateien festgelegt werden?
Oneiros

Wenn Sie etwas wirklich schnelles wollen, verlassen Sie sich nicht auf etwas, das jquery verwendet, um Dinge im Kern zu erledigen, sondern verwenden Sie innerHTML als DOM append. Javascript-Bildlaufleisten können auf langsamen Computern langsamer als Browser-Bildlaufleisten sein, komplexe CSS-Regeln vermeiden und Zeit damit verbringen, das Layout einer einzelnen Zeile zu vereinfachen. Mikrooptimierungen könnten in diesem Fall von Bedeutung sein. Dies ist nur eine allgemeine Übung zur Verbesserung der Leistung. jsPerf.com ist dein Freund.
Vitim.us

37

Die besten Grids sind meiner Meinung nach unten:

Meine besten 3 Optionen sind jqGrid, jqxGrid und DataTables. Sie können mit Tausenden von Zeilen arbeiten und die Virtualisierung unterstützen.


1
+1 für die Liste, obwohl es im Vergleich nicht viel gibt. Ein guter Anfang wäre, die Anzahl der Commits für jedes zu addieren - 33 für Flexigrid ab sofort gegenüber 491 für SlickGrid.
Dan Dascalescu

12
Verschrauben Sie das 5-Minuten-Bearbeitungslimit für Kommentare von SO. # 1 - jqGrid - 1000+ Commits ; # 2 - 752 für DataTables ; # 3 - 491 für SlickGrid ; # 4 - 33 Commits für Flexigrid . Ingrid - kein Update seit Jun 2011 . jqGridView - kein Update seit 2009
Dan Dascalescu

3
Aufbauend auf dem vorherigen Kommentar füge ich hier die Anzahl der Gabeln pro Projekt ein: # 1 - SlickGrid - 670 Gabeln; # 2 - jqGrid - 358 Gabeln; # 3 - Flexigrid - 238; # 4 - DataTables - 216; # 5 - Ingrid - 41; # 6 - jqGridView - 0;
ljs.dev


Kann ich sagen, dass Slickgrid noch lebt und gesund ist, aber das oben zitierte Mleibman-Repo ist tot. Neuer Link: github.com/6pac/SlickGrid (mleibman verweist in einer letzten Notiz auf seinem Repo darauf) oder www.slickgrid.net
Ben McIntyre

25

Ich will keinen Flammenkrieg beginnen, aber wenn Ihre Forscher Menschen sind, kennen Sie sie nicht so gut, wie Sie denken. Nur weil sie über Petabyte an Daten verfügen, können sie nicht einmal Millionen von Datensätzen auf sinnvolle Weise anzeigen. Sie könnten sagen, sie wollen Millionen von Schallplatten sehen, aber das ist einfach albern. Lassen Sie Ihre klügsten Forscher einige grundlegende Berechnungen durchführen: Angenommen, sie verbringen 1 Sekunde damit, jeden Datensatz anzuzeigen. Bei dieser Geschwindigkeit dauert es 1000000 Sekunden, was mehr als sechs Wochen entspricht (von 40 Stunden Arbeitswochen ohne Pausen für Essen oder Toilette).

Denken sie (oder Sie) ernsthaft, dass eine Person (die auf das Gitter schaut) diese Art von Konzentration aufbringen kann? Erhalten sie in dieser Sekunde wirklich viel zu tun, oder filtern sie (wahrscheinlicher) das heraus, was sie nicht wollen? Ich vermute, dass sie Ihnen nach dem Anzeigen einer Teilmenge mit "angemessener Größe" einen Filter beschreiben könnten, der diese Datensätze automatisch herausfiltert.

Wie auch paxdiablo und Sleeper Smith und Lasse V Karlsen angedeutet haben, haben Sie (und sie) die Anforderungen nicht durchdacht. Nachdem Sie SlickGrid gefunden haben, wurde mir die Notwendigkeit dieser Filter sofort klar.


2
Bei der Notwendigkeit von Millionen von Zeilen geht es nicht immer darum, sie anzuzeigen. Manchmal möchten Kunden einen Teilauszug von Datensätzen, die in ihren eigenen Datenanalysesystemen ausgeführt werden sollen.
cbmeeks

10
Wenn es sich um einen Datendump für die eigene Analyse handelt, wird er nicht in einem Raster auf einer Webseite angezeigt, oder?
Steven Benitez

5
Ich muss sie nicht alle auf einmal sehen. Dafür sind Spalten sortiert und da Ctrl+F. Die Alternative (Paging, Website-Suche) ist viel schlimmer. Schauen Sie sich einfach StackOverflow an, wenn Sie versuchen, durch Fragen oder Antworten zu scrollen, Reddit, um durch den Kommentarverlauf eines Benutzers zu scrollen. Sortieren und sofortige Suche bieten eine Leistung, die Windows Explorer bietet, aber Websites fehlen.
Ian Boyd

15

Ich kann mit ziemlich guter Sicherheit sagen, dass Sie dem Benutzer nicht unbedingt Millionen von Datenzeilen anzeigen müssen.

Es gibt keinen Benutzer auf der Welt, der in der Lage ist, diesen Datensatz zu erfassen oder zu verwalten. Selbst wenn Sie es technisch schaffen, ihn abzurufen, werden Sie kein bekanntes Problem für diesen Benutzer lösen.

Stattdessen würde ich mich darauf konzentrieren, warum der Benutzer die Daten sehen möchte. Der Benutzer möchte die Daten nicht nur sehen, um sie zu sehen. In der Regel wird eine Frage gestellt. Wenn Sie sich stattdessen darauf konzentrieren, diese Fragen zu beantworten, sind Sie etwas viel näher, das ein tatsächliches Problem löst.


16
Meine Benutzer sind Forscher, die an Petabytes an Daten gewöhnt sind. Ich glaube, ich kenne meine Benutzer ein bisschen besser als Sie, obwohl Sie im allgemeinen Fall sicherlich Recht haben. Wie für die , warum ist dieser Datenraster einfach Teil einer Reihe von Werkzeugen für große Datenmengen zu verwalten.
Rüdiger

7

Ich empfehle das Ext JS Grid mit der Funktion "Gepufferte Ansicht".

http://www.extjs.com/deploy/dev/examples/grid/buffer.html


ExtJs in der Tat. Es ist im Grunde speziell für die
Datenpräsentation

1
ExtJs ist so gut, dass ich weinen möchte, dass es nicht auf jQuery aufgebaut ist
James Westgate

Jetzt können Sie nur die gitterbezogenen Teile von ExtJS laden, sodass das Hinzufügen eines ExtJS-Gitters zu Ihrer Anwendung nicht zu schwer wird. Sie müssen jedoch immer noch die Unterschiede im Erscheinungsbild berücksichtigen und die ExtJS-Thematik nur für diese Komponente verwenden.
JD Smith

7

(Haftungsausschluss: Ich bin der Autor von w2ui)

Ich habe kürzlich einen Artikel über die Implementierung eines JavaScript-Rasters mit 1 Million Datensätzen geschrieben ( http://w2ui.com/web/blog/7/JavaScript-Grid-with-One-Million-Records ). Ich entdeckte, dass es letztendlich drei Einschränkungen gibt, die verhindern, dass es höher geht:

  1. Die Höhe des Div hat eine Grenze (kann durch virtuelles Scrollen überwunden werden)
  2. Vorgänge wie Sortieren und Suchen werden nach etwa 1 Million Datensätzen langsam
  3. Der Arbeitsspeicher ist begrenzt, da die Daten im JavaScript-Array gespeichert sind

Ich habe das Raster mit 1 Million Datensätzen (außer IE) getestet und es funktioniert gut. Demos finden Sie Demos und Beispiele.


Mit diesem 1-Millionen-Datensatz hat Ihre HTML-Seite eine Größe von 3 MB. Aber wenn ich meine Daten lade, hat die Seite eine Größe von 15 MB. Kann w2ui damit umgehen? Ich brauche alle Daten für einige Berechnungen.
Chetan S. Choudhary

6

dojox.grid.DataGrid bietet eine JS-Abstraktion für Daten, sodass Sie sie mit den bereitgestellten dojo.data-Speichern an verschiedene Backends anschließen oder Ihre eigenen schreiben können. Sie benötigen natürlich eine, die den Direktzugriff für so viele Datensätze unterstützt. DataGrid bietet auch vollen Zugriff.

Bearbeiten Sie also hier einen Link zu Matthew Russells Artikel , der das gewünschte Beispiel liefern soll und Millionen von Datensätzen mit dojox.grid anzeigt. Beachten Sie, dass die alte Version des Rasters verwendet wird, die Konzepte jedoch dieselben sind. Es gab nur einige inkompatible API-Verbesserungen.

Oh, und es ist völlig kostenlos Open Source.



4

Hier sind einige Optimierungen, die Sie anwenden können, um die Dinge zu beschleunigen. Ich denke nur laut nach.

Da die Anzahl der Zeilen in Millionenhöhe liegen kann, benötigen Sie ein Caching-System nur für die JSON-Daten vom Server. Ich kann mir nicht vorstellen, dass jemand alle X Millionen Artikel herunterladen möchte, aber wenn dies der Fall wäre, wäre dies ein Problem. Dieser kleine Test in Chrome für ein Array mit mehr als 20 Millionen Ganzzahlen stürzt auf meinem Computer ständig ab.

var data = [];
for(var i = 0; i < 20000000; i++) {
    data.push(i);
}
console.log(data.length);​

Sie können LRU oder einen anderen Caching-Algorithmus verwenden und eine Obergrenze dafür festlegen, wie viele Daten Sie zwischenspeichern möchten.

Für die Tabellenzellen selbst halte ich das Erstellen / Zerstören von DOM-Knoten für teuer. Stattdessen können Sie einfach die X-Anzahl von Zellen vordefinieren und die JSON-Daten in diese Zellen einfügen, wenn der Benutzer zu einer neuen Position blättert. Die Bildlaufleiste hat praktisch keine direkte Beziehung dazu, wie viel Platz (Höhe) erforderlich ist, um den gesamten Datensatz darzustellen. Sie können die Höhe des Tabellencontainers beliebig festlegen, z. B. 5000 Pixel, und diese der Gesamtzahl der Zeilen zuordnen. Wenn die Containerhöhe beispielsweise 5000 Pixel beträgt und insgesamt 10 Millionen Zeilen vorhanden sind, gibt das starting row ≈ (scroll.top/5000) * 10MWo scroll.topden Bildlaufabstand vom oberen Rand des Containers an. Kleine Demo hier .

Um zu erkennen, wann weitere Daten angefordert werden müssen, sollte ein Objekt idealerweise als Vermittler fungieren, der auf Bildlaufereignisse wartet. Dieses Objekt verfolgt, wie schnell der Benutzer einen Bildlauf durchführt, und stellt eine Datenanforderung für die entsprechenden Zeilen, wenn es so aussieht, als würde der Benutzer langsamer oder vollständig angehalten. Das Abrufen von Daten auf diese Weise bedeutet, dass Ihre Daten fragmentiert werden. Daher sollte der Cache unter diesem Gesichtspunkt gestaltet werden.

Auch die Browserbeschränkungen für maximal ausgehende Verbindungen können eine wichtige Rolle spielen. Ein Benutzer kann zu einer bestimmten Position scrollen, die eine AJAX-Anforderung auslöst, aber bevor dies abgeschlossen ist, kann der Benutzer zu einem anderen Teil scrollen. Wenn der Server nicht ausreichend reagiert, werden die Anforderungen in die Warteschlange gestellt und die Anwendung reagiert nicht mehr. Sie können einen Anforderungsmanager verwenden, über den alle Anforderungen weitergeleitet werden, und ausstehende Anforderungen abbrechen, um Speicherplatz zu schaffen.


4

Ich weiß, dass es eine alte Frage ist, aber immer noch. Es gibt auch dhtmlxGrid , das Millionen von Zeilen verarbeiten kann. Es gibt eine Demo mit 50.000 Zeilen, aber die Anzahl der Zeilen, die im Raster geladen / verarbeitet werden können, ist unbegrenzt.

Haftungsausschluss: Ich bin vom DHTMLX-Team.


Ich möchte 10 MB Json-Daten anzeigen und sie für die Berechnung verwenden. Kann DHTMLX das tun? Mit diesen Daten und HTML-Tags ist die Seite meines Browsers ungefähr 15 MB groß. Lohnt es sich, DHTMLX zu verwenden?
Chetan S. Choudhary


3

Haftungshinweis: i stark verwenden YUI Datatable für eine lange Zeit ohne keine Kopfschmerzen . Es ist kraftvoll und stabil. Für Ihre Anforderungen können Sie eine ScrollingDataTable verwenden , die unterstützt

  • X-Scrolling
  • Y-Scrollen
  • xy-scrolling
  • Ein leistungsstarker Ereignismechanismus

Ich denke, Sie möchten ein tableScrollEvent . Seine API sagt

Wird ausgelöst, wenn eine DataTable mit festem Bildlauf einen Bildlauf hat.

Da jede DataTable eine DataSource verwendet, können Sie ihre Daten über tableScrollEvent zusammen mit der Größe der Renderschleife überwachen, um Ihre ScrollingDataTable entsprechend Ihren Anforderungen zu füllen .

Render Loop Größe sagt

In Fällen, in denen Ihre DataTable die Gesamtheit eines sehr großen Datensatzes anzeigen muss, kann die renderLoopSize-Konfiguration die Verwaltung des Browser-DOM-Renderings unterstützen, damit der UI-Thread nicht für sehr große Tabellen gesperrt wird . Jeder Wert größer als 0 bewirkt, dass das DOM-Rendering in setTimeout () -Ketten ausgeführt wird, die die angegebene Anzahl von Zeilen in jeder Schleife rendern. Der ideale Wert sollte pro Implementierung ermittelt werden, da es keine festen Regeln gibt, sondern nur allgemeine Richtlinien:

  • Standardmäßig ist renderLoopSize 0, sodass alle Zeilen in einer einzigen Schleife gerendert werden. Eine renderLoopSize> 0 erhöht den Overhead.
  • Wenn Ihr Datensatz groß genug ist (Anzahl der Zeilen X Anzahl der Spalten X Formatierungskomplexität), dass Benutzer beim visuellen Rendern eine Latenz erleben und / oder das Skript hängen bleibt, sollten Sie eine renderLoopSize festlegen .
  • Eine renderLoopSize unter 50 ist es wahrscheinlich nicht wert. Eine renderLoopSize> 100 ist wahrscheinlich besser.
  • Ein Datensatz wird wahrscheinlich nicht als groß genug angesehen, es sei denn, er enthält Hunderte und Hunderte von Zeilen.
  • Wenn die Zeilen renderLoopSize> 0 und <total vorhanden sind, wird die Tabelle in einer Schleife gerendert (wie renderLoopSize = 0), es werden jedoch auch Funktionen wie das Zeilen-Striping nach dem Rendern ausgelöst, die von einem separaten setTimeout-Thread verarbeitet werden.

Zum Beispiel

// Render 100 rows per loop
 var dt = new YAHOO.widget.DataTable(<WHICH_DIV_WILL_STORE_YOUR_DATATABLE>, <HOW YOUR_TABLE_IS STRUCTURED>, <WHERE_DOES_THE_DATA_COME_FROM>, {
     renderLoopSize:100
 });

<WHERE_DOES_THE_DATA_COME_FROM> ist nur eine einzelne DataSource . Dies kann ein JSON-, JSFunction-, XML- und sogar ein einzelnes HTML-Element sein

Hier sehen Sie ein einfaches Tutorial, das von mir bereitgestellt wurde. Beachten Sie, dass kein anderes DATA_TABLE-Pluglin Single- und Dual-Click gleichzeitig unterstützt. YUI DataTable ermöglicht es Ihnen. Darüber hinaus können Sie es auch mit JQuery ohne Kopfschmerzen verwenden

Einige Beispiele können Sie sehen

Fühlen Sie sich frei, Fragen zu YUI DataTable zu stellen.

Grüße,


3

Ich verstehe den Punkt irgendwie nicht, für jqGrid können Sie die virtuelle Bildlauffunktion verwenden:

http://www.trirand.net/aspnetmvc/grid/performancevirtualscrolling

Andererseits können Millionen von Zeilen mit Filterung ausgeführt werden:

http://www.trirand.net/aspnetmvc/grid/performancelinq

Ich verstehe den Punkt "als ob es keine Seiten gäbe" wirklich nicht, ich meine ... es gibt keine Möglichkeit, 1.000.000 Zeilen gleichzeitig im Browser anzuzeigen - das sind 10 MB HTML Raw, ich sehe es irgendwie nicht warum Benutzer die Seiten nicht sehen möchten.

Wie auch immer...


2

Der beste Ansatz, den ich mir vorstellen kann, ist das Laden des Datenblocks im JSON-Format für jeden Bildlauf oder eine bestimmte Grenze, bevor der Bildlauf endet. json kann leicht in Objekte konvertiert werden und daher können Tabellenzeilen leicht unauffällig erstellt werden


So habe ich es. Es wird eine Anfrage für eine Reihe von Zeilen gestellt, die in JSON zurückgesendet werden ... Ich suche einen clientseitigen Javascript-Renderer, der dies unterstützt!
Rüdiger

Was??? Was zum Teufel ist "Client Site Renderer"? Javascript muss immer noch einen Ajax-Aufruf tätigen - Sie müssen sich also immer noch auf ein Transportformat festlegen. Sie können sich der Arbeit nicht entziehen. Niemand wird das für dich tun, mein Freund.
Andriy Drozdyuk

1
Ich weiß, dass ein AJAX-Anruf getätigt werden muss. Dieser Teil ist einfach. Der Client fordert so etwas wie "start = 20 & limit = 20" an und ruft die Zeilen 20-39 vom Server ab (XML- oder JSON-Format). Der "clientseitige Renderer" (meine Terminologie!) Stellt diese Anforderungen intelligent (z. B. wenn der Benutzer nach unten scrollt) und rendert die Ergebnisse nahtlos in einem hübschen Raster. Im Gegensatz zu Ihrer Aussage hat jemand anderes diese Arbeit für mich erledigt. Das sind alle anderen Antworten auf diese Frage.
Rüdiger

Nun, es scheint, dass niemand "sonst" es für Sie getan hat :)
Andriy Drozdyuk

1

Ich kann Open Rico nur empfehlen . Am Anfang ist es schwierig zu implementieren, aber wenn Sie es einmal greifen, werden Sie nie mehr zurückblicken.




0

Schauen Sie sich dGrid an:

https://dgrid.io/

Ich bin damit einverstanden, dass Benutzer NIEMALS Millionen von Datenzeilen gleichzeitig anzeigen müssen, aber dGrid kann sie schnell anzeigen (jeweils auf einem Bildschirm).

Kochen Sie nicht den Ozean, um eine Tasse Tee zu machen.


Ihre Tasse Tee (Link) wurde nicht gefunden. :)
Akshay

Es hat jetzt eine eigene Seite :)
ColemanTO
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.