我正在尝试选择正确的技术来更新一个项目,该项目基本上在可缩放、可平移的图形中呈现数千个点。当前使用 Protovis 的实现性能不佳。在这里查看:
http://www.planethunters.org/classify
完全缩小时大约有 2000 个点。尝试使用底部的手柄放大一点,然后拖动它来平移。您会看到它非常不稳定,除非您拥有一台非常快的计算机,否则您的 CPU 使用率可能会在一个内核上达到 100%。对焦点区域的每次更改都会对 protovis 进行重绘,这非常缓慢,而且绘制的点越多越糟糕。
我想对界面进行一些更新,并更改底层的可视化技术,使其对动画和交互更加敏感。从下面的文章中,似乎可以在另一个基于 SVG 的库或基于画布的库之间进行选择:
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/
d3.js是从 Protovis 发展而来的,它是基于 SVG 的,应该更擅长渲染动画。但是,我怀疑它的性能提升多少以及它的性能上限是多少。出于这个原因,我还在考虑使用KineticJS等基于画布的库进行更彻底的改造。但是,在我深入使用一种或另一种方法之前,我想听听有人用这么多数据完成了类似的 Web 应用程序并听取他们的意见。
最重要的是性能,其次是易于添加其他交互功能和编程动画。一次可能不会超过 2000 个点,每个点上都有那些小误差线。放大、缩小和平移需要平滑。如果最新的 SVG 库在这方面表现不错,那么使用 d3 的易用性可能会超过 KineticJS 等的增加设置。但是如果使用画布有巨大的性能优势,特别是对于计算机速度较慢的人,那么我肯定会更喜欢那样做。
NYTimes 制作的使用 SVG 的应用程序示例,但动画效果仍然可以接受: http ://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html . 如果我能够获得这种性能并且不必编写自己的画布绘图代码,我可能会选择 SVG。
我注意到一些用户使用了d3.js 操作与画布渲染相结合的混合体。但是,我在网上找不到太多关于此的文档,也无法与该帖子的 OP 取得联系。如果有人对这种 DOM-to-Canvas(演示、代码)实现有任何经验,我也希望收到您的来信。它似乎是能够操纵数据和对如何呈现数据(以及因此性能)进行自定义控制的一个很好的混合体,但我想知道是否必须将所有内容加载到 DOM 中仍然会减慢速度。
我知道存在一些与此类似的问题,但没有一个问题完全相同。谢谢你的帮助。
跟进:我最终使用的实现在https://github.com/zooniverse/LightCurves