代码之家  ›  专栏  ›  技术社区  ›  Nick B

如何在返回页面时阻止D3.js阻塞

  •  3
  • Nick B  · 技术社区  · 10 年前

    我目前有一个web应用程序,它同时使用本机d3图表和使用c3.js图表模块的图表。

    由于数据变化,我的图表每1-2秒更新一次,屏幕上随时可能有3-4个图表。

    我注意到,如果我在chrome中更改选项卡或最小化窗口,当我返回选项卡时,d3.js会在d3_timer_step中花费很长时间完全锁定UI 5秒以上(取决于用户离开选项卡的时间),如果用户离开选项卡30分钟左右,这基本上可以锁定UI几分钟。

    我假设正在发生的是,当窗口模糊时,d3动画正在排队,然后当它再次聚焦时,只是敲打UI线程。

    显然,当窗口不可见时,我可以(而且可能无论如何)停止更新图表,但我的问题是,是否有其他人发现了这个问题,他们的解决方案是什么?e、 g.d3中是否有限制动画缓冲区的选项或类似选项?

    2 回复  |  直到 10 年前
        1
  •  2
  •   AlexGL    8 年前

    在我的例子中,0.4.11不会改变任何东西(甚至chart.destroy()也不会做出令人惊讶的事情)。核心问题是c3js继续计划d3过渡,即使在当前被模糊和破坏。D3将所有转换推迟到选项卡被聚焦,然后BAM-在单个阻塞请求中执行每一个。

    如果是这种情况,您可以将图表的全局过渡持续时间更改为 0 null 大多数内部c3函数依赖于转换持续时间作为标志来执行转换或不执行转换(在0的情况下)。

        2
  •  0
  •   aendra    8 年前

    我是C3维护人员。

    我的猜测是,你使用的是一个非常旧的C3版本(0.4.9);0.4.11修复了这个问题,我认为有一个bug data.load 。请尝试更新您的版本!