2009-02-16 34 views
5

Tôi đang cố gắng tối ưu hóa bảng sắp xếp mà tôi đã viết. Các nút cổ chai là trong thao tác dom. Tôi hiện đang tạo các hàng bảng mới và chèn chúng mỗi khi tôi sắp xếp bảng. Tôi tự hỏi liệu tôi có thể tăng tốc mọi thứ bằng cách đơn giản sắp xếp lại các hàng, không tái tạo các nút. Để tạo ra sự khác biệt đáng kể, việc sắp xếp lại nút dom sẽ phải dễ dàng hơn nhiều so với việc tạo nút. Đây có phải là trường hợp không? cảm ơn, -Morganjavascript/dom - đắt tiền như thế nào khi tạo và sắp xếp lại các nút dom?

+0

Có bao nhiêu hàng trong bảng mà bạn sắp xếp? –

+0

hàng trăm, không phải hàng ngàn – morgancodes

+0

Tôi sẽ không đăng câu trả lời này vì câu trả lời sẽ không được trả lời vì bạn không trả lời câu hỏi của mình, nhưng bạn có thấy plugin tablesort cho jQuery không? - http://tablesorter.com/docs/example-pager.html –

Trả lời

1

Tôi không biết liệu tạo hoặc thao tác nhanh hơn, nhưng tôi biết rằng nó sẽ được nhanh hơn nếu bạn thao tác toàn bộ bảng khi nó không nằm trên trang và sau đó đặt nó trên tất cả cùng một lúc. Dọc theo các dòng đó, có thể sẽ sắp xếp lại các hàng hiện tại chậm hơn, trừ khi toàn bộ bảng được loại bỏ khỏi DOM trước.

This page gợi ý rằng sẽ nhanh nhất để sao chép bảng hiện tại, thao tác nó như bạn muốn, sau đó thay thế bảng trên DOM.

+0

oh. hấp dẫn. Cảm ơn. – morgancodes

1

Tôi đang vẽ bảng này nhanh gấp hai lần, sử dụng innerHTML, tạo toàn bộ nội dung dưới dạng chuỗi, thay vì chèn từng nút một.

+0

wow, trên thực tế, kỹ thuật đó làm cho nó tồi tệ hơn nhiều trong IE6. – morgancodes

+1

Thay vì chuỗi = string + newstring, hãy sử dụng mảng: var a = []; while (loop) {a.push (newstring)} result = a.join (""); // Chuỗi nối trong IE là khủng khiếp chậm. Tôi đã làm một bài kiểm tra khi Opera hoàn thành trong khoảng 4 giây, và IE vẫn chưa kết thúc sau 20 phút. – some

+0

Vâng, tôi cũng bắt gặp điều đó, nhưng với những gì tôi đang làm, có vẻ như vẫn còn nhanh hơn để thêm các nút dom hơn là sử dụng innerHTML trong IE6. – morgancodes

0

nếu bạn có thể, tốt hơn là thực hiện thao tác dom không phải là thao tác dom thực tế, nhưng dưới dạng phương thức nào đó trong tập lệnh của bạn và sau đó thao tác với dấu cách. Vì vậy, thay vì thực hiện những gì được gọi là repaint trên mỗi nút, bạn gộp lại những gì sẽ được repaint của bạn trên mỗi nút duy nhất vào phương pháp riêng của nó, và sau đó đính kèm các nút vào một phụ huynh mà sau đó sẽ được gắn vào dom thực tế, kết quả chỉ trong hai lần sơn lại thay vì hàng trăm. Tôi nói hai b/c bạn cần phải dọn dẹp những gì trong dom đã có trước khi cập nhật với dữ liệu mới của bạn.

0

tôi đang tìm kiếm một câu trả lời này và quyết định thành lập một chuẩn mực nhanh chóng http://jsfiddle.net/wheresrhys/2g6Dn/6/

Nó sử dụng jQuery, vì vậy không phải là một chuẩn mực tinh khiết, và nó có thể là sai lệch theo những cách khác quá. Nhưng kết quả mà nó đưa ra là các nút DOM di chuyển nhanh gấp hai lần khi tạo và phá hủy các nút dom mỗi lần

Các vấn đề liên quan