我试图选择正确的技术,用于更新一个项目,基本上呈现数千个点在一个可缩放,可平移的图形。当前使用 Protovis 的实现表现不佳。看看这里:
Http://www.planethunters.org/classify
当完全放大时,大约有2000个点。尝试使用底部的手柄放大一点,并拖动它来平移。您将看到它非常不稳定,您的 CPU 使用率可能会在一个核上达到100% ,除非您拥有一台真正快速的计算机。对焦点区域的每一个变化都要求重新绘制原始视觉,这非常缓慢,而且绘制的点越多,情况就越糟糕。
我想对界面进行一些更新,同时改变底层的可视化技术,使其能够更好地响应动画和交互。从下面的文章中可以看出,要么选择另一个基于 SVG 的库,要么选择基于画布的库:
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/
D3.js 是从 Protovis 发展而来的,基于 SVG,是 应该更擅长渲染动画。然而,我怀疑它的性能有多好,它的性能上限是多少。出于这个原因,我还考虑使用像 KineticJS这样的基于画布的库进行更全面的修改。然而,在我深入使用这种或那种方法之前,我想听听那些用这么多数据做过类似 web 应用程序的人的意见,并听听他们的意见。
最重要的是性能,其次是易于添加其他交互特性和动画编程。一次可能不会超过2000个点,每个点上都有小的误差线。放大,缩小,移动需要平滑。如果最新的 SVG 库在这方面还不错,那么使用 d3的容易程度可能会超过 KineticJS 增加的设置,等等。但是,如果使用画布有巨大的性能优势,特别是对于计算机速度较慢的人来说,那么我肯定更愿意这样做。
例如,纽约时报制作的应用程序使用了 SVG,但仍然可以平滑地运行: Http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html.如果我可以获得这样的性能,而不必编写自己的画布绘图代码,我可能会选择 SVG。
我注意到一些用户使用了 d3.js manipulation combined with canvas rendering的混合体。然而,我在网上找不到太多关于这方面的文档,也联系不到那篇文章的 OP。如果有人有任何实现这种 DOM-to-Canvas (小样,密码)的经验,我也想听听您的意见。它似乎是一个很好的混合体,既可以操作数据,又可以自定义控制如何呈现数据(因此也可以控制性能) ,但我想知道是否必须将所有内容加载到 DOM 中仍然会降低速度。
我知道有一些现存的问题和这个类似,但是没有一个问题是完全一样的。谢谢你的帮助。
跟进 : 我最终使用的实现位于 < a href = “ https://github.com/zooniverse/LightCurves”rel = “ norefrer”> https://github.com/zooniverse/lightcurves