gpt4 book ai didi

javascript - DataTable 和 DataSource 的内存泄漏与轮询

转载 作者:搜寻专家 更新时间:2023-11-01 04:42:10 26 4
gpt4 key购买 nike

我有一个从远程 JSON DataSource 填充的 DataTable:

var dataSource = new Y.DataSource.Get({ source: url });

dataSource.plug(Y.Plugin.DataSourceJSONSchema, {
schema: {
resultListLocator: "results",
resultFields: [ "field1", "field2" ]
}
});

var table = new Y.DataTable({ columns = ["col1", "col2"] }

table.plug(Y.Plugin.DataTableDataSource, { datasource: dataSource });

table.render("#table");

table.datasource.load({ request: query });

我正在尝试定期刷新表中的数据。 A forum poster recommended calling load periodically ,我已经尝试过并且它按我希望的那样工作(数据刷新而不显示正在加载...消息)。

Y.later(1000/*ms*/, table.datasource, table.datasource.load, { request: query }, true);

但是,我注意到 Chrome 中存在内存泄漏。表格单元格似乎没有从内存中删除。 Chrome 的堆分析器报告在 Detached DOM tree 中有很多 HTMLTableCellElement 对象。

这是刷新数据的最佳方法吗?如果是这样,是否有某种方法可以清除旧的表格单元格?

备选方案

还有 datatable-polling module可以定期获取数据。不过,我没有任何示例可以说明如何将其与 YUI3 DataTable 一起使用。然而,examples from YUI2表明您可以执行以下操作,这似乎有效:

dataSource.setInterval(1000,         
{
request: query,
callback:
{
success: function(e) { table.onDataReturnInitializeTable },
failure: function() { Y.log("Polling failure", "error"); }
}
});

然而,看起来这就是load is doing under the hood anyway :

load: function(config) {
config = config || {};
config.request = config.request || this.get("initialRequest");
config.callback = config.callback || {
success: Y.bind(this.onDataReturnInitializeTable, this),
failure: Y.bind(this.onDataReturnInitializeTable, this),
argument: this.get("host").get("state") //TODO
};

var ds = (config.datasource || this.get("datasource"));
if(ds) {
ds.sendRequest(config);
}
},

最佳答案

datasource-polling 在这种情况下不会帮助您,因为 Plugin.DataTableDataSource 不会让 DataTable 监听 DataSource 中的所有更改。使用 Plugin.DataTableDataSource 进行轮询的最简单方法是像这样自己设置时间间隔:

var datasource = new Y.DataSource.IO(...);
var table = new Y.DataTable(...);

table.plug(Y.Plugin.DataTableDataSource, {
datasource: datasource
});

// call load() every second
var timer = Y.later(1000, table.datasource, 'load', {
request: foo
}, true);

// later on, stop polling
timer.cancel();

您提到的内存泄漏是有可能的。 DataTable 正在持续开发中,它将在管理内存方面做得更好。但是,如果您有可重现的案例和全面的测量,您绝对应该 open an issue在 YUI 的 GitHub 存储库中。

关于javascript - DataTable 和 DataSource 的内存泄漏与轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16352058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com