Hi Isomorphic,
please see this modified online testcase (v12.0p_2019-08-14).
Every once in a while when scrolling the ListGrid with the mouse wheel, there is an empty space that takes ~0.5 seconds to fill. Empty space is normally ~3 rows, but can be ~12 rows (FYI: I do see 22 rows at once in the sample on my FullHD monitor).
I made the sample that way that all data is loaded upfront, so this is no network issue.
A minimal mouse-wheel advance scrolls 2 rows for me. A "full finger" mouse-wheel turn is ~8 minimal advances = ~16 records.
Basically at the end of every "full finger" mouse-wheel I do see a white empty space (now Win10 Chromium 76.0.3809.100, but browser independent).
That white space is filled correctly after some time, but it is noticeable enough before this, so that customers complain.
This does not happen at all with showRecordComponents: false.
Compared to the testcase I also have more columns and horizontal scrolling in my application.
It seems that either drawAheadRatio is not working in this case or something else is wrong. virtualScrolling does not seem to make a difference here. Same for recordComponentPoolingMode.
Do you have any idea what is causing this delay? I can see CPU usage go up when scrolling, but is this really related?
Thank you & Best regards
Blama
please see this modified online testcase (v12.0p_2019-08-14).
Every once in a while when scrolling the ListGrid with the mouse wheel, there is an empty space that takes ~0.5 seconds to fill. Empty space is normally ~3 rows, but can be ~12 rows (FYI: I do see 22 rows at once in the sample on my FullHD monitor).
I made the sample that way that all data is loaded upfront, so this is no network issue.
A minimal mouse-wheel advance scrolls 2 rows for me. A "full finger" mouse-wheel turn is ~8 minimal advances = ~16 records.
Basically at the end of every "full finger" mouse-wheel I do see a white empty space (now Win10 Chromium 76.0.3809.100, but browser independent).
That white space is filled correctly after some time, but it is noticeable enough before this, so that customers complain.
This does not happen at all with showRecordComponents: false.
Compared to the testcase I also have more columns and horizontal scrolling in my application.
It seems that either drawAheadRatio is not working in this case or something else is wrong. virtualScrolling does not seem to make a difference here. Same for recordComponentPoolingMode.
Do you have any idea what is causing this delay? I can see CPU usage go up when scrolling, but is this really related?
Thank you & Best regards
Blama
Code:
isc.ListGrid.create({ ID:"dsListGrid", width: "100%", height: "100%", autoFetchData: true, dataSource: "supplyItem", dataFetchMode: "local", virtualScrolling: false, showRecordComponents: true, showRecordComponentsByCell: true, recordComponentPoolingMode: "recycle", canRemoveRecords: true, showRowNumbers: true, // scrollRedrawDelay: 1, // scrollWheelRedrawDelay: 1, // drawAheadRatio: 1.0, fields:[ {name: "itemID"}, {name: "itemName"}, {name: "SKU"}, {name: "category"}, {name: "unitCost"}, {name: "units"}, {name: "inStock"}, {name: "nextShipment"}, {name: "description", }, //{name: "buttonField", title: "Info", align: "center" }, {name: "iconField", title: "Comments/Stats", width: 110 } ], createRecordComponent : function (record, colNum) { var fieldName = this.getFieldName(colNum); if (fieldName == "iconField") { var recordCanvas = isc.HLayout.create({ height: 22, width: "100%", align: "center" }); var editImg = isc.ImgButton.create({ showDown: false, showRollOver: false, layoutAlign: "center", src: "icons/16/comment_edit.png", prompt: "Edit Comments", height: 16, width: 16, grid: this, click : function () { isc.say("Edit Comment Icon Clicked for country : " + record["SKU"]); } }); var chartImg = isc.ImgButton.create({ showDown: false, showRollOver: false, layoutAlign: "center", src: "icons/16/chart_bar.png", prompt: "View Chart", height: 16, width: 16, grid: this, click : function () { isc.say("Chart Icon Clicked for country : " + record["SKU"]); } }); recordCanvas.addMember(editImg); recordCanvas.addMember(chartImg); return recordCanvas; } else { return null; } }, updateRecordComponent: function (record, colNum, component, recordChanged) { var fieldName = this.getFieldName(colNum); if (fieldName == "iconField") { var membersArray = component.getMembers(); for (i=0;i<membersArray.size;i++) { if (i == 0) { membersArray[i].addProperties({ click : function () { isc.say("Edit Comment Icon Clicked for country : " + record["SKU"]); } }); } else { membersArray[i].addProperties({ click : function () { isc.say("Chart Icon Clicked for country : " + record["SKU"]); } }); } } } else if (fieldName == "buttonField") { component.addProperties({ icon: "flags/16/" + record["itemName"] + ".png", click : function () { isc.say(record["SKU"] + " info button clicked."); } }); } else { return null; } return component; } });
Comment