【问题标题】:Comparison between d3.js and chart.js (only for charts) [closed]d3.js 和 chart.js 之间的比较(仅适用于图表)[关闭]
【发布时间】:2015-02-05 12:09:38
【问题描述】:

我在我的项目中多次使用chart.js,但我从未使用过d3.js。很多人说 d3.js 是最好的图表 javascript 框架,但没有人能够解释原因,尤其是当我想与 chart.js 进行比较时。

我发现了这个:http://www.fusioncharts.com/javascript-charting-comparison/ 但这不是我想要的。

有谁知道这些框架在可用性和性能方面的比较(仅适用于图表)?

【问题讨论】:

标签: javascript d3.js charts chart.js


【解决方案1】:

d3.js 不是“图表”库。它是用于创建和操作 SVG/HTML 的库。它提供了帮助您可视化和操作数据的工具。虽然您可以使用它来创建常规图表(条形图、折线图、饼图等),但它的功能远不止这些。当然,这种“能力如此之大”带来了更陡峭的学习曲线。如果你想走这条路,有很多基于d3.js - nvd3.js、dimple.js、dc.js 的传统图表库。

我不熟悉Chart.js,但快速浏览该网站告诉我,它更像是工厂图表库的运行。它支持 6 种基本图表类型,你永远不会这样做stufflikethiswithit。 但是 API 看起来很简单,而且我确信它很容易使用。

除此之外,两者最明显的区别是Chart.js 是基于画布的,而d3.js 主要是关于SVG。 (现在我说主要是因为d3.js 可以操作所有类型的HTML 元素,所以you could even use it 可以帮助您在画布上绘图。)通常,画布对大量元素的执行效果优于SVG(我说的非常大 - 成千上万的点,线等......)。另一方面,SVG 更易于操作和交互。使用 SVG,每个点、线等都成为 DOM 的一部分——你现在想要那个点是绿色的,只需改变它。使用画布,它是一个静态绘图,需要重新绘制以进行任何更改 - 当然它绘制得如此之快,您通常不会注意到。这是来自 Microsoft 的 some good reading。

【讨论】:

  • @emrah,链接可能很旧(大约在 IE9 时代),但提供的信息仍然非常相关。
【解决方案2】:

因为我试图找到一个快速的图表库来在移动设备上显示图表,所以性能对我来说很重要。它还必须拥有可以进行商业使用的许可证。我比较了:

  1. c3,它基于d3,因此使用SVG
  2. 正在使用画布的chart.js

图表加载在本机应用程序内的 WebView 组件中,所有数据(包括 JS 库)都是本地的,因此不会因 http 请求而减速。为了进一步提高性能,我还将所有内容都放在一个文件中。

我加载了 4 个图表(折线、条形、饼图、折线/条形组合)以及大约 500 个数据点。

我的时间测量不包括 html 页面的实际加载。我从开始使用图表库代码的那一刻开始测量,直到渲染结束。所有图表动画均已关闭。

C3 在现代 Android 和 iPhone 设备上花费了大约 1500-1800 毫秒。 iPhone 的性能比 Android 快 100 毫秒左右。

Chart.js 大约需要 400-800 毫秒。 Android 的性能比 iPhone 快了大约 300 毫秒。

毫不奇怪,SVG 速度较慢。根据您的用例,可能太慢了。

在桌面计算机上,c3 渲染大约需要 150-200 毫秒,charts.js 大约需要 80-100 毫秒。在 Android 和 iPhone 模拟器中运行相同的测试与在桌面上运行相同的结果。所以移动设备的速度变慢肯定是由于硬件/处理限制。

希望有帮助

【讨论】:

    【解决方案3】:

    2016 年更新

    一般的经验法则是:

    d3.js - 非常适合交互式可视化

    chart.js - 非常适合快速和简单

    A few other charting libraries 正在崛起,所以请继续测试,不要忘记为open source 做出贡献!

    【讨论】:

      【解决方案4】:
        图表.js
      • 它使用与像素相关的 html5 画布标签,因此当您调整 chart.js 生成的图形的大小时,您会失去清晰度
      • 它是声明性的,意味着您只需声明所需的输入即可生成图形
      • 学习曲线更小
      • 生成的图表类型是预定义和限制的
        d3.js
      • 它使用与分辨率无关的 svg,因此当您调整 d3 生成的图形的大小时,您不会失去清晰度
      • 这是必要的,意味着您必须编写一些逻辑来生成图表
      • 陡峭的学习曲线
      • 生成的图表类型未预定义,您可以创建任何您想要的图表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2017-09-16
        • 1970-01-01
        相关资源
        最近更新 更多