Javascript 高性能,可与10000个对象交互
我需要在网页上显示大约10000个圆圈。每个圆都必须绑定到数据。我还需要与我的圈子进行如下互动:Javascript 高性能,可与10000个对象交互,javascript,d3.js,canvas,svg,Javascript,D3.js,Canvas,Svg,我需要在网页上显示大约10000个圆圈。每个圆都必须绑定到数据。我还需要与我的圈子进行如下互动: 如果我将鼠标移到css上,则更改css(例如高亮显示) 如果我点击数据,就可以访问它 我尝试了三种实现: 通过D3生成SVG 再次通过D3生成div,对“模拟”圆进行分类 一次穿过画布 对于div解决方案,它只是丑陋的,因为我的圆并不总是完全圆的。 对于SVG和canvas,使用它的速度很慢 如何在不减少显示的圆圈数量的情况下提高性能,并且仍然有一些好看的东西?可能会使您放慢速度的是检测鼠标
- 如果我将鼠标移到css上,则更改css(例如高亮显示)
- 如果我点击数据,就可以访问它
- 通过D3生成SVG
- 再次通过D3生成div,对“模拟”圆进行分类
- 一次穿过画布
如何在不减少显示的圆圈数量的情况下提高性能,并且仍然有一些好看的东西?可能会使您放慢速度的是检测鼠标对象重叠,这是浏览器的一项非常通用的功能,因此没有特别优化。好消息是你可以自己轻松地优化它。考虑这种方法:
- 将圆渲染到画布中。画布在整个交互过程中将是静态的。不需要重新绘制它的内容
- 检测鼠标是否在圆上很容易自己实现。你知道圆心的位置,你知道鼠标的位置,你知道数学。因此,您可以自己搜索鼠标光标下的圆
- 此外,您可以利用结构(例如)将圆心组织成层次结构,以极大地加快搜索过程
- 您可以在鼠标光标下绘制另一个圆,而不是更改圆的CSS。在
上的单独canvas
中执行此操作,以便不需要重新绘制底层div
canvas