So sánh d3.js và chart.js

Như các bạn đã biết, D3.js và Chart.js là hai thư viện JavaScript để vẽ biểu đồ và dữ liệu dạng hiển thị phổ biến nhất. Tính đến hiện tại, D3.js đã có hơn 85.000 sao và Chart.js hơn 44.000 sao trên Github. Trong bài viết này, mình sẽ cùng các bạn so sánh hai công cụ vẽ biểu đồ này để cùng xem chúng ta nên sử dụng D3.js và Chart.js trong những trường hợp nào nhé.

I. Cơ bản:

Cả D3.js và Chart.js đều cho phép tạo các biểu đồ phổ biến trong quá trình lập trình, như biểu đồ thanh (bar chart), biểu đồ đường (line chart) và biểu đồ phân tán (scatter plots) nhưng cách tiếp cận của chúng khác nhau tương đối nhiều. Trong khi Chart.js cung cấp lựa chọn bao gồm các biểu đồ có thể sử dụng sẵn, cho phép lập trình viên tạo kiểu và định cấu hình, khi đó D3 cung cấp các khối module xây dựng, được kết hợp với nhau để tạo ra hầu như mọi hình ảnh trực quan dữ liệu theo mong muốn của người lập trình.
 
Nếu coi hai loại biểu đồ trên như gia vị nấu nướng, D3 giống như bạn tự pha chế nước sốt theo ý thích, kết hợp giữa hành, tỏi, gia vị và rau để tạo ra một món ăn độc đáo của riêng bạn, trong khi Chart.js giống như bạn sử dụng nước sốt làm sẵn mua từ siêu thị. Tự nấu từ đầu có thể sẽ mang lại một món ăn ngon nếu đầu bếp biết họ đang muốn làm món gì, nhưng sẽ đòi hỏi nhiều thời gian, nỗ lực và kinh nghiệm hơn. Nước sốt làm sẵn mua từ siêu thị lại mang lại một bữa ăn đủ chất, vừa miệng và chắc chắn cần ít thời gian và công sức hơn rất nhiều.

II. So sánh chi tiết:

D3.js

D3 cho phép các lập trình viên tạo hình ảnh trực quan cho dữ liệu đang được tương tác một cách riêng biệt. Nó bao gồm các module để trợ giúp nhiều tác vụ khác nhau như:
 
  • Thêm, sửa và xóa các phần tử HTML / SVG
  • Hoạt hình (animation)
  • Tương tác (interaction) ví dụ: thu phóng, di chuyển, kéo
  • Sắp xếp các phần tử dựa trên cấu trúc dữ liệu mạng (network data structure) và cây (tree data structure)
  • Hỗ trợ làm việc với dữ liệu địa lý
Các tác vụ như vậy được gọi là các khối xây dựng của trực quan hóa dữ liệu (data visualisation). Một lập trình viên có kinh nghiệm có thể kết hợp các công cụ này để tạo ra một biểu đồ giúp trực quan hóa dữ liệu một cách riêng biệt.

Chart.js

  • Chart.js cung cấp cho chúng ta các biểu đồ dạng thanh (bar), đường (line), hình tròn (circle) và phân tán được tạo sẵn. Chúng ta có thể chạy biểu đồ trong một khoảng thời gian ngắn với lượng code tối thiểu và dễ dàng. Biểu đồ cũng bao gồm các phần như chú giải, popup khi di chuột và chuyển đổi chuỗi (series toggling). Các biểu đồ cũng đáp ứng với các kích thước thiết bị với UI được responsive.
  • Biểu đồ có thể được cấu hình. Ví dụ, chú giải có thể được cấu hình để hiển thị bên trên, bên dưới hoặc bên cạnh biểu đồ. Giao diện của biểu đồ cũng có thể được sửa đổi bằng cách thay đổi màu nền, màu đường, độ rộng đường và nhiều thứ khác nữa.
  • Chart.js hiển thị các biểu đồ của nó bằng cách sử dụng phần tử Canvas mang lại hiệu suất tốt so với SVG, đặc biệt là khi hiển thị một lượng lớn dữ liệu. Ưu điểm khác của kết xuất Canvas là việc tải xuống biểu đồ dưới dạng tệp hình ảnh tương đối dễ dàng.

Lựa chọn giữa D3.js và Chart.js

Chart.js là một lựa chọn tốt nhất đối với các biểu đồ tiêu chuẩn như biểu đồ thanh, đường, hình tròn và biểu đồ phân tán, bởi vì nó sẽ đòi hỏi ít nỗ lực hơn để các lập trình viên tạo một biểu đồ hoạt động bao gồm tooltip và popup khi di chuột. Việc tạo các biểu đồ như vậy với D3.js là một công việc tương đối phức tạp, đặc biệt khi cần có chú giải, cửa sổ bật lên khi di chuột, lựa chọn chuỗi, đường lưới, animation và yêu cầu responsive cho các thiết bị khác nhau.
 
Tuy nhiên, nếu bạn không muốn vẽ các biểu đồ tiêu chuẩn có sẵn, mà cần phải có một loại biểu đồ riêng, đặc biệt, D3.js là một lựa chọn phù hợp. Các hình ảnh hóa dữ liệu dự phòng như Đề xuất ngân sách của Obama theo ảnh dưới:

So sánh D3.js và Chart.js
 
 
Về hiệu suất, giữa D3.js và Chart.js đều có hiệu suất khá tốt và không có nhiều sự khác biệt. Cả hai thư viện đều xử lý thoải mái hàng nghìn điểm dữ liệu.

So sánh

 

D3.js Chart.js
Các khối xây dựng (building block) để xây dựng nên dữ liệu hiển thị Các biểu đồ sẵn sàng để sử dụng
Sự kết hợp của các khối xây dựng (building block) Cấu hình
SVG hoặc Canvas Canvas
Phải có code để tạo tương tác Tương tác mặc định (tooltips, series selection)
Cần tự code responsive Responsive mặc định
Cần phải code để có Legend Legend mặc định
Sử dụng tốt cho các dữ liệu hiển thị cần thiết kế riêng Giới hạn trong các biểu đồ chuẩn

Tổng kết

Tóm lại, cả D3.js và Chart.js đều là những công cụ tuyệt vời để xây dựng nên các hệ thống biểu đồ cho các website. Trong khi Chart.js tập trung vào việc dễ dàng sử dụng, chỉ cần cấu hình để có thể xây dựng các biểu đồ đẹp, mượt mà thì D3.js tập trung vào xây dựng các công cụ xây dựng khối (Building block) hỗ trợ cho các biểu đồ thiết kế riêng, cần tính cá biệt cao. 
Rất cảm ơn các bạn đã đọc bài của Baobinh.net, nếu các bạn thấy hay, xin hãy nhập email và subscribe hoặc bookmark website để nhận những bài viết bổ ích khác.