So sánh giữa d3.js và chart.js (chỉ dành cho biểu đồ) [đã đóng]


88

Tôi đã sử dụng chart.js trong các dự án của mình vài lần nhưng tôi chưa bao giờ sử dụng d3.js. Rất nhiều người nói rằng d3.js là khung công tác javascript tốt nhất cho biểu đồ nhưng không ai trong số họ có thể giải thích tại sao, đặc biệt là khi tôi muốn so sánh với chart.js.

Tôi đã tìm thấy điều này: http://www.fusioncharts.com/javascript-charting-comparison/ nhưng nó không phải là thứ tôi đang tìm kiếm.

Có ai biết về sự so sánh của các khuôn khổ này về khả năng sử dụng và hiệu suất (chỉ cho biểu đồ) không?


1
Nói cho vui, tôi đang phát triển biểu đồ cơ bản chart.js bằng cách sử dụng d3.js với cùng một tập dữ liệu. Bạn có thể xem - s.codepen.io/bumbeishvili/debug/RGbvPg
bumbeishvili

Cập nhật 2018 d3 có vải quá
PirateApp

Câu trả lời:


215

d3.jskhông phải là một thư viện "biểu đồ". Nó là một thư viện để tạo và thao tác SVG / HTML. Nó cung cấp các công cụ giúp bạn hình dung và thao tác dữ liệu của mình. Mặc dù bạn có thể sử dụng nó để tạo các biểu đồ thông thường (thanh, đường, hình tròn, v.v.) nhưng nó có khả năng làm được nhiều hơn thế. Tất nhiên với điều này "có khả năng rất nhiều" đi đến một đường cong học tập dốc hơn. Có rất nhiều các thư viện biểu đồ thông thường được xây dựng trên d3.js- nvd3.js, dimple.js,dc.js nếu bạn muốn đi con đường đó.

Tôi không quen Chart.jsnhưng nhìn nhanh vào trang web cho tôi biết nó giống như một thư viện biểu đồ nhà máy. Nó hỗ trợ 6 loại biểu đồ cơ bản và bạn sẽ không bao giờ làm những thứ như này với . Nhưng API trông đơn giản và tôi chắc chắn rằng nó dễ sử dụng.

Ngoài ra, sự khác biệt rõ ràng nhất giữa hai là Chart.jsdựa trên canvas, trong khi d3.jschủ yếu là về SVG. (Bây giờ tôi nói chủ yếud3.js có thể thao tác tất cả các loại phần tử HTML nên bạn thậm chí có thể sử dụng nó để giúp bạn vẽ trên canvas.) Nói chung canvas sẽ thực hiện SVG cho một số lượng lớn các phần tử (tôi đang nói rất lớn - hàng nghìn điểm, đường thẳng, v.v.). Mặt khác, SVG dễ thao tác và tương tác hơn. Với SVG, mỗi điểm, dòng, v.v. trở thành một phần của DOM - bạn muốn điểm đó có màu xanh lục ngay bây giờ, chỉ cần thay đổi nó. Với canvas, nó là một bản vẽ tĩnh sẽ được vẽ lại để thực hiện bất kỳ thay đổi nào - tất nhiên nó vẽ rất nhanh mà bạn thường không bao giờ nhận ra. Đây là một số bài đọc hay của Microsoft.


6
@emrah, liên kết có thể đã cũ (khoảng thời gian của IE9) nhưng thông tin được cung cấp vẫn còn rất nhiều liên quan.
Đánh dấu

36

Vì tôi đang cố gắng tìm một thư viện biểu đồ nhanh để hiển thị biểu đồ trên thiết bị di động nên hiệu suất rất quan trọng đối với tôi. Nó cũng phải có giấy phép để có thể sử dụng cho mục đích thương mại. Tôi đã so sánh:

  1. c3, dựa trên d3 và do đó sử dụng SVG
  2. chart.js đang sử dụng canvas

Các biểu đồ được tải bên trong một thành phần WebView bên trong một ứng dụng gốc và tất cả dữ liệu (bao gồm cả thư viện JS) đều là cục bộ, do đó không bị chậm do yêu cầu http. Để tối đa hóa hiệu suất hơn nữa, tôi cũng đặt mọi thứ bên trong một tệp duy nhất.

Tôi đã tải 4 biểu đồ (đường, thanh, bánh, đường / thanh) với khoảng 500 điểm dữ liệu.

Việc đo thời gian của tôi không bao gồm tải thực tế của trang html. Tôi đã đo hình thức từ thời điểm tôi bắt đầu sử dụng mã thư viện biểu đồ cho đến khi kết thúc kết xuất. Tất cả hoạt ảnh biểu đồ đã bị tắt.

C3 mất khoảng 1500-1800 ms trên các thiết bị Android và iPhone hiện đại. iPhone hoạt động tốt hơn Android khoảng 100ms.

Chart.js mất khoảng 400-800ms. Android hoạt động tốt hơn iPhone khoảng 300ms.

Không có gì ngạc nhiên, SVG chậm hơn. Tùy thuộc vào trường hợp sử dụng của bạn, có thể quá chậm.

Trên máy tính để bàn, kết xuất trong c3 là khoảng 150-200ms và biểu đồ.js là khoảng 80-100ms. Chạy thử nghiệm tương tự trong trình giả lập Android và iPhone cho kết quả tương tự như trên máy tính để bàn. Vì vậy, việc làm chậm thiết bị di động chắc chắn là do giới hạn phần cứng / xử lý.

Hy vọng điều đó sẽ giúp



0
    chart.js
  • Nó sử dụng thẻ canvas html5 phụ thuộc vào pixel, vì vậy khi bạn thay đổi kích thước biểu đồ được tạo ra chart.js, bạn sẽ mất đi sự rõ ràng
  • Nó là khai báo, có nghĩa là bạn chỉ phải khai báo các đầu vào bắt buộc để tạo đồ thị
  • Đường cong học tập ít hơn
  • Các loại biểu đồ được tạo được xác định trước và có giới hạn
    d3.js
  • Nó sử dụng svg độc lập với độ phân giải, vì vậy khi bạn thay đổi kích thước đồ thị được tạo d3, bạn sẽ không bị mất độ rõ ràng
  • Nó là bắt buộc, có nghĩa là bạn phải viết một số logic để tạo biểu đồ
  • Đường cong học tập sâu sắc
  • Các loại biểu đồ được tạo không được xác định trước và bạn có thể tạo bất kỳ biểu đồ nào bạn muốn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.