Javascript 将组添加到包含超过82条记录的交叉筛选器中会耗尽内存
我使用crossfilter来驱动一些带有Javascript 将组添加到包含超过82条记录的交叉筛选器中会耗尽内存,javascript,crossfilter,Javascript,Crossfilter,我使用crossfilter来驱动一些带有dc.js的图表,但是当处理更多的82条记录时,我的内存崩溃了 我的记录是一组对象,如下所示: { "date": Thu May 24 2018 11:29:27 GMT+0100 (GMT Daylight Time), "recipients": ["name1", "name2"], "text": "Lorem ipsum dolor sit amet" } var ndx = crossfilter(items) this.di
dc.js
的图表,但是当处理更多的82条记录时,我的内存崩溃了
我的记录是一组对象,如下所示:
{
"date": Thu May 24 2018 11:29:27 GMT+0100 (GMT Daylight Time),
"recipients": ["name1", "name2"],
"text": "Lorem ipsum dolor sit amet"
}
var ndx = crossfilter(items)
this.displayItems = ndx.allFiltered()
var dateDimension = ndx.dimension(d => d.date)
var dayHourDimension = ndx.dimension(d => [d.date.getDay(), d.date.getHours()])
// by day
var detailGroup = dateDimension.group(d => {
if (d) { // Chrome identifies this line as causing the out of memory crash
return new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())
}
})
// by month
var overviewGroup = dateDimension.group(d => {
if (d) {
return new Date(d.getUTCFullYear(), d.getUTCMonth())
}
})
var heatMapGroup = dayHourDimension.group().reduceSum(d => 1)
我正在执行如下数据的初始加载:
{
"date": Thu May 24 2018 11:29:27 GMT+0100 (GMT Daylight Time),
"recipients": ["name1", "name2"],
"text": "Lorem ipsum dolor sit amet"
}
var ndx = crossfilter(items)
this.displayItems = ndx.allFiltered()
var dateDimension = ndx.dimension(d => d.date)
var dayHourDimension = ndx.dimension(d => [d.date.getDay(), d.date.getHours()])
// by day
var detailGroup = dateDimension.group(d => {
if (d) { // Chrome identifies this line as causing the out of memory crash
return new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate())
}
})
// by month
var overviewGroup = dateDimension.group(d => {
if (d) {
return new Date(d.getUTCFullYear(), d.getUTCMonth())
}
})
var heatMapGroup = dayHourDimension.group().reduceSum(d => 1)
我在我的代码中标记了Chrome在崩溃发生之前中断的点,通过调用堆栈查看,它位于crossfilter源代码中,新值被添加到组中(注意,我使用的是v1.4.5)。Edge和Firefox中超过82条记录也会发生同样的崩溃。我试着将记录中的数据缩减到日期,但这没有什么区别。显然,我希望能够处理超过82条记录,那么有人知道我能做些什么来解决这个问题吗?对此应该有一个公认的答案。OP自己设法找出了问题评论中的错误
这里的解决方案是确保crossfilter获得100%的完美数据。CSV中没有空行,JavaScript对象中没有空白属性,诸如此类。您可以共享错误消息和/或数据吗?我猜第83条记录的日期字段是空的,这会导致日期维度的顺序不正确,因此会出现堆栈溢出错误。嗯,好主意,我来看看。Chrome本身并没有错误消息,只是识别出执行该行会导致内存错误并停止执行脚本。这很奇怪。如果你能提供娱乐指导,我想看看问题所在。啊,你是对的,这是数据!我已经过滤掉了错误的数据,一切都很好。我们通常处理这个问题的方法是确保维度访问永远不会返回null/未定义的值。不可否认,这对于日期和数字来说有点困难,因为你必须想出一个“空白”日期,这并不总是现实的。