通过许多掉落目标来反应DnD性能

我已经花了几天的时间来了解为什么在某些情况下,使用React DnD进行拖放操作的速度如此之慢。

更确切地说,问题实际上并不是在拖动元素时,而是在开始拖动元素时:单击并处理单击元素并移动光标,它可能占用最多该元素出现在我的光标下方10秒钟。拖动本身有点迟钝,但可以接受,这不是问题所在。

我终于发现,随着放置目标数量的增加,它变得越来越慢。例如,屏幕上可以有50个组件,每个组件都不是一个,而是两个放置目标,因为我将其作为“顶部放置目标”和“底部放置目标”来处理,因此可以将元素放置在其上方或下方取决于光标所在的位置。只需消除这些可能性之一,性能就可以大大提高。

我猜这个问题源于以下事实:当我开始拖动时,DnD层会搜索所有可能的放置目标的组件,然后...使用它们执行操作(使用connect.dropTarget()函数)。 / p>

是否有避免这种情况的方法,还是DnD起作用的原因?就像,当鼠标悬停在放置目标时,是否可以检测它们,而不是在开始拖动元素时将其全部加载?例如,当它们悬停时,我仍然需要更改其样式。

顺便说一句,我仍在使用旧版装饰器API,新的hooks API是否可以改善性能?

谢谢。

renguopeng55 回答:通过许多掉落目标来反应DnD性能

我终于发现,放下目标的数量会越来越慢。

当我开始使用react-dnd时,这也是我的第一个想法:为每个放置位置都设置一个单独的放置目标。就像您一样,我发现这存在重大的性能问题。

我意识到我只需要一个放下目标就可以覆盖屏幕的很大一部分。放置物品时,您可以使用DropTargetMonitor#getClientOffset()之类的监控功能,连同放置目标一起计算放置物品的位置。如果需要对放置的项目进行离散定位,则可以轻松地将其对齐到您喜欢的网格图块大小的最接近倍数。

本文链接:https://www.f2er.com/2791471.html

大家都在问