我目前有一个使用c3.js图表模块同时使用原生d3图表和图表的网络应用。
由于数据变化,我的图表每1-2秒更新一次,屏幕上可能有3-4张图表。
我注意到如果我更改chrome中的标签或最小化窗口,当我返回标签时,d3.js会在d3_timer_step中花费很长时间将UI完全锁定5秒以上(具体取决于多长时间)如果用户离开30分钟左右,这可以基本上锁定用户界面很长时间。
我假设正在发生的事情是d3动画在窗口模糊时排队,然后在再次聚焦时敲击UI线程。
显然,当窗口不可见时,我可以(并且可能会反复)停止更新我的图表,但是我的问题在于是否有其他人发现了这个问题以及他们的解决方案是什么?例如在d3中是否有一个限制动画缓冲区或类似的选项?
答案 0 :(得分:1)
在我的情况下,0.4.11不会改变任何东西(甚至chart.destroy()也不会令人惊讶地做一件事)。核心问题是c3js继续安排d3过渡,即使在此刻模糊和破坏。 D3侧面推迟所有转换,直到选项卡聚焦,然后BAM - 在单个阻止请求中执行每一个。
如果是这种情况,您可以将图表的全局转换持续时间更改为0
或null
。大多数内部c3函数依赖于转换持续时间作为执行转换的标志(如果为0)。
答案 1 :(得分:0)
我是C3维护者。
我的猜测是你使用的是旧版C3(0.4.9); 0.4.11解决了这个问题,我认为data.load
存在错误。请尝试更新您的版本!