使用 HighCharts 的条形图无响应脚本和/或高响应时间

Posted

技术标签:

【中文标题】使用 HighCharts 的条形图无响应脚本和/或高响应时间【英文标题】:Unresponsive Script and/or high response time for bar chart using HighCharts 【发布时间】:2012-06-11 14:02:56 【问题描述】:

当我尝试渲染具有大量数据点的条形图时遇到问题。但这仅发生在 FireFox 中。 10 秒后出现一个弹出窗口说脚本无响应,如果我继续,大约需要 20 秒才能显示。我已经建立了一个独立的例子http://jsfiddle.net/tankchintan/UWB8h/5/

在 Chrome 中,虽然它需要大约 5 秒,但它仍然可以毫无问题地呈现。我想知道是否有解决此问题的方法?或者我可以做些什么来缩短响应时间吗?大约有 1000 行,恕我直言,这并不高。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您以两种方式伤害您的用户:

首先,他们必须等待几秒钟才能呈现页面,然后整个浏览器就会冻结,因为 JS 引擎没有响应

但更重要的是,您正在伤害他们,因为您正在显示一个具有近 1000 个水平条的条形图

第二点其实更重要。当然,浏览器的 javascript 性能各不相同(众所周知,Chrome 速度更快,但 Firefox 并没有挂在我的电脑上——但我知道你的意思)。可能有一天所有的浏览器都会很高兴地立即呈现这个图表。

但是您的用户会喜欢 10 个屏幕长的图表吗?想象一个带有thousands of rows in a single table 的网页。直截了当 - 考虑不同的数据表示:可能在 20 个样本后截断数据并显示额外的“Others...”栏?

顺便说一句,jqplot 也有类似的问题 - 我在同一页面上呈现了 10 多个简单图表。就像您的情况一样,Firefox 尖叫着脚本运行时间过长。我通过暂停渲染一个图表来修复它。该页面的作用就像一个魅力,响应速度更快,更令人愉快。

【讨论】:

我完全同意这两点。实际上,这个 vis 是页面的一部分,所有其他组件的加载速度都非常快。无论如何,我将致力于减少样本数量或完全移除水平条。我只是好奇是否有 1000 行是一个合理的上限?如果没有,那么有办法减少响应时间。 @Chantz 我不认为 1000 是一个合理的上限。如果一根条是 20 像素厚,你仍然会得到 ca。 20 个屏幕...我会说 20/50/100 取决于布局是合理的。不要指望 JavaScript 引擎(动态的、垃圾收集的语言)足够快来渲染这么多的图形。【参考方案2】:

我同意显示这么多数据点的难度。这种情况主要发生在其他类型图表中的 FF 中,在我的例子中是柱形图。

这里的不同之处在于,在大型数据集上显示趋势可能是有原因的,而 Highcharts 缩放功能使此类图表更有用。用户可以在更大的集合中发现高点和异常,并放大以查看该区域内的各个列。同样对于柱形图,整个演示文稿都在一页上。

也就是说,无响应的脚本问题仍然存在,无论这种类型的要求如何,都需要要求用户在呈现图表之前指定数据的子集。

【讨论】:

以上是关于使用 HighCharts 的条形图无响应脚本和/或高响应时间的主要内容,如果未能解决你的问题,请参考以下文章

Highcharts:如何将图例链接到类别而不是条形系列?

条形图上的 Highcharts 标记

使用带有两个不同 JSON 端点的 Highcharts 向下钻取绘制条形图

设置组合线和条形图最大宽度的Highcharts失败

动态更改条形颜色 - highcharts

Highcharts:条形重叠的颜色