我正在try Select 正确的技术来更新一个项目,该项目基本上可以在可zoom 、可平移的图形中呈现数千个点.目前使用Protovis的实现表现不佳.点击此处查看:
http://www.planethunters.org/classify个
当完全缩小时,大约有2000个点.try 使用底部的手柄放大一点,然后拖动它来平移.您会发现它非常不稳定,除非您有一台速度非常快的计算机,否则您的CPU使用率可能会在一个核心上达到100%.对焦点区域的每一次更改都需要重新绘制到Protovis,这非常慢,绘制的点越多,情况就越糟糕.
我想对界面做一些更新,并改变底层的可视化技术,使其对动画和交互更具响应性.从下面的文章看,似乎需要在另一个基于SVG的库和基于画布的库之间进行 Select :
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/个
d3.js是从Protovis发展而来的,它是基于SVG的,是supposed to be better at rendering animations.然而,我对它有多好以及它的性能上限是多少持怀疑态度.出于这个原因,我还在考虑使用基于画布的库(如KineticJS)进行更全面的判断.然而,在我使用这样或那样的方法之前,我想听听曾经用这么多数据做过类似Web应用程序的人的意见.
最重要的是性能,其次是易于添加其他交互功能和编写动画.一次可能不会超过2000个点,每个点上都有那些小的误差条.Zooming in, out, and panning around need to be smooth.如果最新的SVG库在这方面做得不错,那么使用d3的易用性可能会超过KineticJS等增加的设置.但是,如果使用Canvas有巨大的性能优势,特别是对于计算机速度较慢的人,那么我肯定更喜欢这样做.
"纽约时报"制作的APP示例,使用SVG,但动画仍然流畅,效果可以接受: http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html美元.如果我可以获得这样的性能,而不必编写自己的画布绘图代码,我可能会 Select SVG.
我注意到一些用户使用了d3.js manipulation combined with canvas rendering的混合版本.然而,我在网上找不到太多关于这篇文章的文档,也无法联系到这篇文章的作者.如果有人有过这种DOM到画布(democode)实现的经验,我也想听听你的意见.它似乎是一个很好的混合体,既能操作数据,又能对如何呈现数据(以及性能)进行自定义控制,但我想知道,将所有内容加载到DOM中是否仍然会降低速度.
我知道有一些现有的问题与这个问题类似,但没有一个问题是完全相同的.谢谢你的帮助.
Follow-up:我最终使用的实现是https://github.com/zooniverse/LightCurves