【问题标题】:dc.js / crossfilter performance issue 12,000+ rows of CSV datadc.js / crossfilter 性能问题 12,000+ 行 CSV 数据
【发布时间】:2014-06-24 21:45:49
【问题描述】:

我在使用 dc.js 和 crossfilter 时遇到了一些性能问题。我正在创建一组图表,显示一些自行车数据的不同维度(代码here,数据here,可查看here)。图表在几秒钟或两秒钟后呈现,但主要的性能问题发生在单击任何图表时 - 过渡动画在延迟后有点“快照”,有点刺耳。我还注意到,仅删除页面顶部的空折线图会导致其余三个图表在过渡恢复正常时表现得更好。

我查看了一些类似的问题,例如this one,但这似乎并不一定适用,因为我不是一次按多个维度进行拆分。 12,000 条记录是否刚刚接近 crossfilter 可以处理的上限?该文件只有大约 1.4 MB,因此在这种大小下会有问题似乎有点令人惊讶,但也许这一切都表明我缺乏理解。非常感谢任何关于这个的指针,因为我很难过。感谢阅读。

【问题讨论】:

    标签: javascript dc.js crossfilter


    【解决方案1】:

    这通常意味着某些东西会减慢 Crossfilter 的更新速度,导致浏览器冻结,直到大部分转换已经完成。

    唯一让我印象深刻的是,您在 dayOfWeek 维度的访问器函数中有 2 个变量声明。最好在加载数据时预先定义该属性。

    我看到的唯一其他可能的问题是数据中的 Date 对象以及基于它定义的维度。这些类型的复杂对象会使事情变慢很多(并且 d3.js 日期解析不是非常快),但我不认为这是 Chrome 分析器中的一个主要问题,所以我不认为这就是让你在这里放慢速度的原因。

    【讨论】:

    • 谢谢,伊桑。我的直觉是,问题源于与日期有关的事情,因为折线图是唯一使用日期维度的图表,当我从页面上删除该图表时,事情就会顺利进行。感谢您查看这个。另外,您知道 d3.csv() 内置函数的任何更快的替代方法吗?再次感谢!
    • 我为折线图上的 x 轴定义的变量是罪魁祸首。最初,我让 d3 解析所有天、小时、分钟和秒,并告诉 crossfilter 将此对象用作 x 轴上的一个单位。由于我只需要 x 轴上的天数,因此我现在只使用 dayDim 变量并根据需要定义其他变量以实现进一步的粒度。
    • 很高兴听到它成功了。听起来你像我一样接近调试。我通常开始取出东西,直到它开始工作,然后再添加东西:-) 回想起来,是的,dateDimension 分组可能会导致很多组!很好的收获。
    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2015-05-15
    • 2017-05-29
    • 1970-01-01
    相关资源
    最近更新 更多