D3.js D3:最昂贵的操作是什么?

D3.js D3:最昂贵的操作是什么?,d3.js,D3.js,我刚才在重写代码,感觉慢了很多。以前它几乎是瞬间的,现在我的动画需要4秒钟来对鼠标悬停做出反应 我试着删除过渡,没有不透明度的变化,但它仍然非常缓慢 虽然它更具可读性 我所做的唯一一件事就是将大型函数拆分成更小、更符合逻辑的函数,并对分组进行重新排序,并使用新的选择。是什么造成了如此巨大的速度差异?我的数据集也不大…16kb 编辑:我还拆分了我的巨型链 edit2:我对代码做了一些修改,似乎切换到nodeGroup.append(“path”)会导致它比svg.append(“path”)慢很多

我刚才在重写代码,感觉慢了很多。以前它几乎是瞬间的,现在我的动画需要4秒钟来对鼠标悬停做出反应

我试着删除过渡,没有不透明度的变化,但它仍然非常缓慢

虽然它更具可读性

我所做的唯一一件事就是将大型函数拆分成更小、更符合逻辑的函数,并对分组进行重新排序,并使用新的选择。是什么造成了如此巨大的速度差异?我的数据集也不大…16kb

编辑:我还拆分了我的巨型链

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


edit3:另外,我在重绘之前使用了不透明度0来隐藏我的所有路径线,这导致它变得越来越慢,因为这些线从未被删除。切换到删除()

没有数据,很难处理或提出解决方案。您不需要共享私有数据,但它有助于生成具有相同结构的假数据。如果我们看不到有多少dom元素正试图创建/与之交互,那么我们也不清楚性能的影响来自何处

至于突出的明显的东西,您并没有以数据驱动的方式绘制线段。任何时候你看到一个for循环,这都是一个提示,当你可以的时候,你没有使用d3的选择


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

没有数据,很难使用或建议解决方案。您不需要共享私有数据,但它有助于生成具有相同结构的假数据。如果我们看不到有多少dom元素正试图创建/与之交互,那么我们也不清楚性能的影响来自何处

至于突出的明显的东西,您并没有以数据驱动的方式绘制线段。任何时候你看到一个for循环,这都是一个提示,当你可以的时候,你没有使用d3的选择


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

发布一个指向您所拥有内容的链接?这是一个链接。你的数据来源是什么?没有它小提琴就不能工作。不应该真正显示数据,仅仅从结构上看没有什么明显的东西?发布一个链接到你拥有的东西?这是一个链接。你的数据来源是什么?没有它小提琴就不能工作。不应该真正显示数据,仅仅从结构上看什么都不明显?我想我已经弄明白了。我重做它是为了利用d3的选择,我相信上一次对性能的影响是因为我在循环中调用了一个选择,所以它是循环中的一个循环,反复地画东西。谢谢你的提示!我想我已经明白了。我重做它是为了利用d3的选择,我相信上一次对性能的影响是因为我在循环中调用了一个选择,所以它是循环中的一个循环,反复地画东西。谢谢你的提示!