【问题标题】:D3: What are the most expensive operations?D3:最昂贵的操作是什么?
【发布时间】:2013-06-16 16:56:08
【问题描述】:

我刚才正在重写我的代码,感觉速度要慢很多。以前它几乎是即时的,现在我的动画需要 4 秒才能对鼠标悬停做出反应。

我尝试删除过渡并且没有更改不透明度,但它仍然很慢。

虽然它更具可读性。 - -;

我唯一做的就是将大型函数拆分为更小的更合乎逻辑的函数,并重新排序分组并使用新的选择。什么会导致如此巨大的速度差异?我的数据集也不大...16kb。

编辑:我还拆分了我的庞大链。

edit2:我对我的代码做了一些修改,似乎切换到 nodeGroup.append("path") 导致它比 svg.append("path") 慢得多。不过,关于这一点的不雅点是,当整个组已经转换时,我必须在使用 svg 时将绘制的路径转换到中间。任何人都可以提供一些见解和 group.append vs svg.append 吗?

edit3:此外,我在重绘之前使用 opacity:0 隐藏所有路径线,这导致路径变得越来越慢,因为这些线从未被删除。切换到remove();

【问题讨论】:

  • 发布一个链接到你有什么?
  • jsfiddle.net/dlwjiang/epBab 这是一个链接。
  • 你的数据源是什么?没有它,小提琴将无法工作..
  • 不应该真的显示数据,光从结构上看不出什么?

标签: d3.js


【解决方案1】:

如果没有数据,就很难使用或提出解决方案。您不需要共享私有数据,但它有助于生成一些具有相同结构的假数据。如果我们看不到您尝试制作/交互的 dom 元素数量,也不清楚您的性能受到的影响。

至于突出的明显事物,您并没有以数据驱动的方式来绘制细分。任何时候你看到一个 for 循环都暗示你没有使用 d3 的选择。

您应该将 listEdges 绑定到您的路径并从选择中绘制它们,可以将它们从那里转换到中心。另外,当你可以做nodeGroup.select时你不应该做d3.select,这样你在搜索你的圈子时不需要遍历整个页面。

【讨论】:

  • 我想通了。我正在重做它以利用 d3 的选择,我相信之前对性能的影响是因为我在循环中调用了选择,所以它是循环中的循环重复绘制事物。感谢您的提示!
猜你喜欢
  • 1970-01-01
  • 2018-03-27
  • 2020-06-24
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多