我正在创建一个dgrid OnDemandGrid。该商店是一个dojo / store / MemoryStore,它有一个接近50k记录的JSON数据集。 我在我的OnDemandGrid中使用这个商店。当我开始滚动时,我的脚本挂起& chrome抛出一个msg对话框,说该页面没有响应,你想要杀死它。
我没有得到如何在没有我的页面死亡的情况下使滚动高效和有效。 下面是网格的代码。
request("../../data/dataInJsonFormat.json", {
handleAs: "json"
}).then(function(response) {
var store = new Memory({
data: response
});
var grid = new OnDemandGrid({
id: "DataRecords",
// minRowsPerPage: 10,
// maxRowsPerPage: 10,
// bufferRows: 20,
// pagingMethod: "throttleDelayed",
keepScrollPosition: true,
loadingMessage: "Loading Data",
store: store,
columns: {
COMPNOS: "COMPNOS",
NatureCode: "NatureCode",
SHIFT: "Day"
}
}, "dataGrid");
grid.startup();
该文档称,OnDemandGrid将负责虚拟滚动,但似乎这个数据集崩溃了。这个数据集太大了吗?我需要使用其他类型的商店吗?
由于
答案 0 :(得分:1)
50,000条记录是内存存储的批次记录。尽管dgrid会在用户滚动时懒洋洋地渲染数据,但每次滚动时,Memory存储库都会被强制从该巨大的数组中查找并复制一个小切片。虽然50k记录并不能让Chrome挂起,但它确实会使每个查询明显变慢。
此外,通过请求所有数据并将其存储在内存中,您需要用户下载所有50k记录,而他们可能只会查看其中的1%。通常,内存存储最多只能达到几千个结果。您可能应该查看基于服务器的存储,例如dojo / store / JsonRest(假设您已经或可以构建service which behaves as it expects)或dojo-smore/QueryRead(dojo/store
实现类似于{ {3}})。这些只会向服务器发出请求,以获取用户实际滚动到的记录。