2

我有一个基于D3 v3的图表,使用内置的缩放行为来处理拖盘功能。 zoom处理程序正在使用​​更新更顺利比只是调用更新每个平移操作。使用鼠标右键而不是左键更好地使D3 v3缩放/拖动性能更好?

当我开始在图表中使用大量数据时,我注意到使用鼠标右键而不是左侧拖动时更新的性能明显更好。在深入挖掘Chrome DevTools之后,我发现两种操作之间存在着非常奇怪的差异。

这是右侧拖动以平移图表时的大块时间轴视图。

Timeline Chart while Right Mouse Dragging

这是我所期望的时间表的样子,帧更新是相对正常和正在以最快的速度被称为是可以的。更新为〜25ms,重新绘制〜60ms。 〜每帧85毫秒。

这是具有完全相同数据的时间线,当左侧 拖动时,图表中的数据完全相同。

Timeline Chart while Left Mouse Dragging

正如你可以看到每个帧正在显著更多的时间(〜175ms之间),与一次更新的结束和下一个开始之间巨大差距的时间。在时间轴中没有可见的处理,只有少数事件处理程序(不是我加的,似乎是D3)的事件处理程序,最多只需0.23ms。

我已删除了所有其他的事件处理程序,我可以找到在图表上,没有效果

我已经看到了Chrome,但是一些处理的一些优化拖动操作过程之前,并且已经看到的速度放缓在此期间的HTTP流量,但纯客户端更新没有。

这是一个已知的问题? D3会为左拖动做些特别的事情吗?有没有人见过这个?

+0

刚刚尝试添加'.on('mousemove')'防止默认处理程序到处理缩放行为的相同元素,这完全解决了这个问题。奇怪的是,我从来没有在其他地方看到过这种行为。谢谢您的帮助! – XenoByteZero

回答

0

有一个默认处理程序会影响您的计时和性能。

调用preventDefault()将其禁用。

相关问题