CẬP NHẬT CÂU HỎI Tôi đã cập nhật này được gọn gàng hơn một chút ..:êm Animate thuộc tính thay đổi ~ 3000 Raphael đối tượng cùng một lúc
Trong fiddle này: http://jsfiddle.net/pX2Xb/4/ Tôi có một số mã raphael thu hút 3000 vòng kết nối đến một trang. Sau đó, nó cố gắng tạo hoạt ảnh cho tất cả các vòng kết nối cùng một lúc (thay đổi màu tô) trong 10 giây, kết quả là một hoạt ảnh trực quan. Thay đổi số vòng kết nối thành 20 để xem hoạt ảnh mượt mà hơn nhiều để so sánh.
Câu hỏi của tôi là (a) tôi có thể cập nhật cho 3000 thành phần mượt mà hơn và (b) nếu có, mã sẽ làm như thế nào?
Một số lưu ý:
- Tôi sẵn sàng chấp nhận một thời gian nhỏ đánh nếu có một số cách để tối ưu hóa việc này, nhưng, ví dụ, tôi muốn tất cả vòng tròn để ít nhất đã được cập nhật trong 1.5x bất kể thời gian hoạt ảnh được đặt thành. Vì vậy, nếu hoạt ảnh là 10 giây, tất cả các vòng kết nối sẽ thay đổi trong 15.
- 3000 yếu tố gần như giới hạn của tôi vào lúc này, vì vậy tôi rất vui khi được làm việc đó :) Nói rằng, nếu giải pháp có thể xử lý hiệu quả hơn thế, cho một trường hợp tổng quát, điều đó thực sự tuyệt vời.
chi tiết trở lên, trong trường hợp nó giúp
tôi là tạo ra một bản đồ lớn của quận Mỹ, trong đó có hơn 3000; Tôi đang sử dụng this Wikipedia svg file để nhận các đường dẫn SVG có liên quan để tạo bản đồ và hiển thị bản đồ bằng cách sử dụng RaphaelJs.
Theo đó, tôi kết thúc với hơn 3000 báo cáo tương tự như sau:
var cc_02130 = rsr.path("M 140.66674,.... 320.11635"); // county path
cc_02130.attr({id: '02130',.. .."marker-start": 'none'}); // init attrs
Tôi cũng đang tạo ra một đối tượng Paper.set()
để giữ tất cả những yếu tố này:
var myset = paper.set([cc_56039, cc_56040, cc_56041 ...])
Quên cho một thời điểm mà tệp thực sự được tạo ở đây khá lớn, tôi sẽ đánh giá cao các đề xuất của cách tôi có thể áp dụng các thay đổi đối với khối lượng đối tượng được nêu chi tiết ở trên, đó là cả CPU nhanh và hợp lý khôn ngoan (có thể là một yêu cầu lớn).
Tôi chắc chắn sẽ mở để thay đổi cấu trúc mã/đối tượng của mình, miễn là tôi có thể thay đổi từng thuộc tính của các hạt cụ thể. Ví dụ: tôi muốn có thể áp dụng màu khác nhau cho từng nội dung đường dẫn trong một hoặc hai giây (cho tất cả 3000+).
Thách thức mà tôi đang đối mặt không phải là cách áp dụng các thay đổi màu sắc, hoạt ảnh, v.v ..., nhưng làm thế nào để thực hiện điều này một cách nhanh chóng và hiệu quả. Ngay bây giờ, máy của tôi hét lên với tôi nếu tôi lặp lại và áp dụng các thay đổi trên 3000 đối tượng; như là một thay thế, tôi đã sử dụng setTimeout
để phá vỡ những thay đổi thành những phần nhỏ hơn (có thể là 10 khi di chuyển, với độ trễ 40 ms). Hơn 3000 mục, điều này trở nên khá chậm và vẫn sử dụng rất nhiều CPU.
Cảm ơn, oli
Tôi đoán là độ trễ của bạn đến từ số lượng lớn các lần vẽ lại được kích hoạt bởi bạn cập nhật các đối tượng, không phải do thay đổi đối tượng. 3000 cuộc gọi chức năng phải rất khả thi trong vòng một giây ngay cả trên máy chậm. Bạn có thể đo lường nếu bạn đang kích hoạt vẽ lại cho mỗi thay đổi không? Nếu có, hãy xem có cách nào để chặn vẽ lại hoặc thực hiện cập nhật hàng loạt trước khi vẽ lại hay không. – Munter
Tôi đồng ý @Munter - Bây giờ tôi hiểu vấn đề của tôi phải làm với việc vẽ lại/dựng hình thực tế tất cả các hình dạng này, trái ngược với lời gọi hàm thực tế. Với điều này trong tâm trí, tôi vẫn còn phần nào đảm bảo như thế nào tôi có thể cải thiện _this_ vấn đề. Đã cập nhật câu hỏi của tôi cho phù hợp. – oli
Loại vấn đề của bạn phù hợp hơn với d3.js, nếu bạn có khả năng mất các trình duyệt không phải là svg. Đây là jsfiddle của bạn với hoạt ảnh được xử lý bởi d3: http://jsfiddle.net/ekMd6/ – Duopixel