Tôi đang cố gắng chọn công nghệ phù hợp để sử dụng cho việc cập nhật một dự án về cơ bản hiển thị hàng nghìn điểm trong một biểu đồ có thể thu phóng, xoay được. Việc triển khai hiện tại, sử dụng Protovis, là kém hiệu quả. Kiểm tra nó tại đây:
http://www.planethunters.org/classify
Có khoảng 2000 điểm khi thu nhỏ hoàn toàn. Hãy thử sử dụng tay cầm ở phía dưới để phóng to một chút và kéo nó để xoay xung quanh. Bạn sẽ thấy rằng nó khá lộn xộn và mức sử dụng CPU của bạn có thể tăng lên 100% trên một lõi trừ khi bạn có một máy tính thực sự nhanh. Mỗi thay đổi đối với khu vực lấy nét gọi là vẽ lại đến protovis, khá chậm và tệ hơn với nhiều điểm được vẽ hơn.
Tôi muốn thực hiện một số cập nhật cho giao diện cũng như thay đổi công nghệ trực quan hóa cơ bản để đáp ứng tốt hơn với hoạt ảnh và tương tác. Từ bài viết sau, có vẻ như sự lựa chọn là giữa một thư viện dựa trên SVG khác hoặc một thư viện dựa trên canvas:
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/
d3.js , phát triển từ Protovis, dựa trên SVG và được cho là hiển thị hình ảnh động tốt hơn . Tuy nhiên, tôi không rõ là tốt hơn bao nhiêu và trần hiệu suất của nó là bao nhiêu. Vì lý do đó, tôi cũng đang xem xét một cuộc đại tu hoàn chỉnh hơn bằng cách sử dụng thư viện dựa trên canvas như KineticJS . Tuy nhiên, trước khi đi quá sâu vào việc sử dụng cách tiếp cận này hay cách khác, tôi muốn nghe ý kiến của một người đã thực hiện một ứng dụng web tương tự với nhiều dữ liệu này và lấy ý kiến của họ.
Điều quan trọng nhất là hiệu suất, tập trung thứ hai vào việc dễ dàng thêm các tính năng tương tác khác và lập trình hoạt ảnh. Có thể sẽ không có nhiều hơn 2000 điểm cùng một lúc, với những thanh lỗi nhỏ trên mỗi điểm. Phóng to, thu nhỏ và xoay xung quanh cần phải trơn tru. Nếu các thư viện SVG gần đây nhất hoạt động tốt ở mức này, thì có lẽ sự dễ sử dụng d3 sẽ vượt trội hơn so với việc tăng cường thiết lập cho KineticJS, v.v. Nhưng nếu có một lợi thế hiệu suất lớn khi sử dụng canvas, đặc biệt là đối với những người có máy tính chậm hơn, thì tôi chắc chắn sẽ thích đi theo cách đó.
Ví dụ về ứng dụng do NYTimes tạo ra sử dụng SVG nhưng vẫn tạo hoạt ảnh mượt mà có thể chấp nhận được: http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html . Nếu tôi có thể đạt được hiệu suất đó và không phải viết mã vẽ canvas của riêng mình, tôi có thể sẽ chuyển sang SVG.
Tôi nhận thấy rằng một số người dùng đã sử dụng kết hợp giữa thao tác d3.js kết hợp với kết xuất canvas . Tuy nhiên, tôi không thể tìm thấy nhiều tài liệu về điều này trực tuyến hoặc liên hệ với OP của bài đăng đó. Nếu bất kỳ ai có kinh nghiệm thực hiện loại triển khai DOM-to-Canvas ( demo , mã ) này, tôi cũng muốn nghe ý kiến của bạn. Nó có vẻ là một sự kết hợp tốt giữa khả năng thao tác dữ liệu và có quyền kiểm soát tùy chỉnh đối với cách hiển thị nó (và do đó là hiệu suất), nhưng tôi tự hỏi liệu việc tải mọi thứ vào DOM có làm chậm mọi thứ hay không.
Tôi biết rằng có một số câu hỏi hiện tại tương tự như câu hỏi này, nhưng không câu hỏi nào trong số họ chính xác hỏi điều tương tự. Cảm ơn bạn đã giúp đỡ.
Tiếp theo : cách triển khai mà tôi đã kết thúc bằng cách sử dụng tại https://github.com/zooniverse/LightCurves