SBond hat geschrieben:Klar

...wenn es dir nicht zu viel Arbeit macht

die Herausforderung in diesem Fall war es, das dem ListIconGadget zugrunde liegende
dGrid verwenden zu wollen, damit keine externen JavaScript-Libraries geladen werden müssen.
Das Laden und Darstellen der Daten geschieht meines Erachtens nun in akzeptablen Geschwindigkeiten, wobei ein Löwenanteil für die Aufbereitung der Daten verbraten wird. Vielleicht kann ein JS-Profi hier noch an der Tuning-Schraube drehen.
Demo mit Spiel-Daten:
[Edit: Den Link gibt's auf Anfrage per PN]
Code:
Code: Alles auswählen
EnableExplicit
Enumeration
#Window_Main
#Gadget_Grid
EndEnumeration
Global T1
Procedure BlockUI(Message.s)
! $.blockUI({ message: v_message });
EndProcedure
Procedure UnblockUI()
! $.unblockUI();
EndProcedure
Procedure BindGridToGadget(Gadget, GridColumns, GridData)
! var selector = $(spider_GadgetID(v_gadget).div).find('.dijitContentPane');
! var grid = new spider.DGridOnDemandGrid({
! collection: v_griddata,
! columns: v_gridcolumns
! }, selector[0]);
! selector.data("grid", grid);
! grid.startup();
EndProcedure
! function csvToArray (csv) {
! var rows = csv.split("\n");
! return rows.map(function (row) {
! return row.split("\t");
! });
! };
! window.csvToArray = csvToArray;
Procedure HTTPRequestCallback(Success, Result.s)
If Success
Debug "Daten geladen in: " + Str(ElapsedMilliseconds() - T1) + " ms"
T1 = ElapsedMilliseconds()
! var array = csvToArray(v_result);
Debug "Csv -> Array: " + Str(ElapsedMilliseconds() - T1) + " ms"
T1 = ElapsedMilliseconds()
! var records = [];
! $.each(array, function(rowCounter, row) {
! if (rowCounter == 0) {
! } else {
! var record = {};
! record.id = rowCounter;
! $.each(row, function(columnCounter, column) {
! record['col' + columnCounter.toString()] = column;
! });
! records.push(record);
! }
! });
Protected Store
! v_store = new spider.DStoreMemory( {data : records, idProperty: 'id'} );
Debug "Daten -> Store: " + Str(ElapsedMilliseconds() - T1) + " ms"
Protected Columns
! v_columns = {
! col0: 'Time [s]',
! col1: 'Offset [ms]',
! col2: 'Delay [ms]',
! col3: 'Dispersion [ms]',
! col4: 'Poll [Log2s]'
! };
OpenWindow(#Window_Main, 0, 0, 600, 500, "dGrid", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ContainerGadget(#Gadget_Grid, 10, 10, 580, 480) : CloseGadgetList()
T1 = ElapsedMilliseconds()
BindGridToGadget(#Gadget_Grid, Columns, Store)
Debug "Store -> Gadget: " + Str(ElapsedMilliseconds() - T1) + " ms"
Else
Debug "!HTTPRequest()"
EndIf
UnblockUI()
EndProcedure
BlockUI("<h1>20 MB Daten werden geladen...</h1>")
T1 = ElapsedMilliseconds()
HTTPRequest(#PB_HTTP_Get, "resources/bigdata.csv", "", @HTTPRequestCallback())
Schau es Dir mal an. Wenn Du Fragen hast: Melden!
Grüße ... Peter