d3.js 和图表.js之间的比较(仅适用于图表)
Comparison between d3.js and chart.js (only for charts)
我在项目中多次使用chart.js,但我从未使用过d3.js。很多人说 d3.js 是最好的图表 JavaScript 框架,但他们都无法解释原因,尤其是当我想与 chart.js 进行比较时。
我发现这个:http://www.fusioncharts.com/javascript-charting-comparison/但这不是我要找的。
有谁知道这些框架在可用性和性能方面的比较(仅适用于图表(?
d3.js
不是一个"图表"库。 它是一个用于创建和操作SVG/HTML的库。 它提供了帮助您可视化和操作数据的工具。 虽然您可以使用它来创建常规图表(条形图、折线图、饼图等(,但它的功能远不止于此。 当然,随着这种"有能力做这么多"而来的是更陡峭的学习曲线。 有很多传统的图表库建立在d3.js
之上 - nvd3.js
,dimple.js
,dc.js
如果你想走这条路的话。
我不熟悉Chart.js
但快速浏览一下网站告诉我,它更像是工厂图表库的运行。 它支持 6 种基本图表类型,您永远不会用它做这样的事情。 但是 API 看起来很简单,我相信它很容易使用。
除此之外,两者之间最明显的区别是Chart.js
是基于画布的,而d3.js
主要是关于SVG的。 (现在我说主要是因为d3.js
可以操作所有类型的HTML元素,所以你甚至可以使用它来帮助你在画布上绘画。 一般来说,画布将超越大量元素的SVG(我说的非常大 - 数千个点,线等...... 另一方面,SVG 更易于操作和交互。 使用 SVG 时,每个点、线等都成为 DOM 的一部分 - 您现在想要该点为绿色,只需更改它即可。 使用画布时,它是一个静态绘图,需要重新绘制以进行任何更改 - 当然,它绘制得如此之快,您通常永远不会注意到。 以下是Microsoft的一些好读物。
由于我正在尝试找到一个快速的图表库来在移动设备上显示图表,因此性能对我来说很重要。它还必须有一个许可证,使其能够用于商业用途。我比较了:
- c3,它基于 d3,因此使用 SVG
- 图表.js使用画布
图表加载在本机应用程序的 WebView 组件中,所有数据(包括 JS 库(都是本地的,因此不会因 http 请求而减慢速度。为了进一步提高性能,我另外将所有内容放在一个文件中。
我加载了 4 个图表(折线图、条形图、饼图、折线图/条形图组合(,其中包含大约 500 个数据点。
我的时间测量不包括html页面的实际加载。从开始使用图表库代码到渲染结束,我就从那一刻开始测量。所有图表动画均已关闭。
C3在现代Android和iPhone设备上花费了大约1500-1800毫秒。 iPhone的性能比Android好100毫秒左右。
图表.js大约需要400-800毫秒。Android的表现比iPhone好约300毫秒。
毫不奇怪,SVG 速度较慢。根据您的用例,可能太慢了。
在台式计算机上,c3 的渲染约为 150-200 毫秒,图表.js约为 80-100 毫秒。在Android和iPhone模拟器上运行相同的测试具有与桌面相同的结果。因此,移动设备的速度变慢肯定是由于硬件/处理限制。
希望有帮助
2016 年更新
一般的经验法则是:
d3.js
- 非常适合交互式可视化
chart.js
- 非常适合快速简单
其他一些图表库正在崛起,所以请继续测试,不要忘记为开源做出贡献!
-
图表.js
- 它使用依赖于像素的html5画布标签,因此当您调整图表大小时.js生成的图形会失去清晰度
- 它是声明性的,这意味着您只需声明所需的输入即可生成图形
- 学习曲线较小
- 生成的图表类型是预定义的,并且受到限制
-
D3.js
- 它使用与分辨率无关的svg,因此当您调整d3生成的图形的大小时,您不会失去清晰度
- 这是势在必行的,意味着你必须编写一些逻辑来生成图表
- 陡峭的学习曲线
- 生成的图表类型不是预定义的,您可以创建所需的任何图表
- JS适用于Firefox和Safari,但不适用于Chrome.此处'是我的网站
- wordpress和packery.js的集成问题,但适用于非wordpress网站
- "捆绑;仅适用于HTML/JS的解决方案
- Node.js/Socket.io适用于除Firefox之外的所有应用程序,这可能是缓存问题
- js不适用于Chrome,但适用于IE
- JS插件,适用于Meteor
- 适用于android的three.js cordova apk
- Angular js 适用于 jsfiddle 但不适用于我的机器 奇怪的错误
- JS幻灯片适用于Firefox和chrome,但不适用于Internet Explorer
- IE不将CSS应用于JS,适用于Chrome / FF
- 删除cookie(PHP,JS)适用于Firefox,Safari,Opera,但不适用于Chrome
- 是否有适用于 Node.js 的 XSD 验证器
- 使用 response.js 的参数无效,适用于 IE8
- JS中的事件只适用于foreach中的第一个检查表
- 强制仅限数字的js函数不'不适用于Firefox,但适用于Chrome;IE运行良好
- jQuery只适用于HTML文件,不适用于JS文件
- Kinetic.js javascript不适用于Google Chrome,但适用于Mobile Safari
- 适用于node.js+coffeescript+jasmine的良好IDE
- 哪个版本的NPM适用于Node.js 0.2.6
- 从小程序调用JS适用于Firefox和Chrome,但不适用于Safari