如何使用" OnDemandGrid"进行虚拟滚动;有效率的

时间:2014-05-19 14:12:49

标签: javascript dgrid dojo

我正在创建一个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将负责虚拟滚动,但似乎这个数据集崩溃了。这个数据集太大了吗?我需要使用其他类型的商店吗?

由于

1 个答案:

答案 0 :(得分:1)

50,000条记录是内存存储的批次记录。尽管dgrid会在用户滚动时懒洋洋地渲染数据,但每次滚动时,Memory存储库都会被强制从该巨大的数组中查找并复制一个小切片。虽然50k记录并不能让Chrome挂起,但它确实会使每个查询明显变慢。

此外,通过请求所有数据并将其存储在内存中,您需要用户下载所有50k记录,而他们可能只会查看其中的1%。通常,内存存储最多只能达到几千个结果。您可能应该查看基于服务器的存储,例如dojo / store / JsonRest(假设您已经或可以构建service which behaves as it expects)或dojo-smore/QueryReaddojo/store实现类似于{ {3}})。这些只会向服务器发出请求,以获取用户实际滚动到的记录。