2013-07-03 30 views
8

Hôm qua tôi đã đọc các tài liệu jQuery cho .Trên(), nơi đã nêu:Tôi có nên đính kèm .Trên tôi (nghe tiếng 'click') sự kiện vào tài liệu hoặc yếu tố

Tránh sử dụng quá nhiều tài liệu hoặc tài liệu. cơ thể cho các sự kiện giao trên tài liệu lớn

Nhưng hôm nay, tôi đã nhìn vào JSPERF này và tôi nhận thấy một Biến tốt hơn khi sự kiện nhấp chuột được gắn vào tài liệu.

Vì vậy, ngay bây giờ, tôi đang bối rối. Các bài kiểm tra hiệu suất có thể chống lại các tài liệu?

+0

Sự kiện nhấp được đính kèm với liên kết $, tài liệu chỉ là trình lắng nghe cho sự kiện.target – jQuery00

Trả lời

7

JSPerf của bạn ở đây là kiểm tra tốc độ để đính kèm các sự kiện, không hiệu quả mà họ có về hiệu suất trang tích lũy. Đây là điều sai lầm để kiểm tra!

Sự kiện Javascript lan truyền DOM tất cả các cách tới gốc tài liệu. Điều này có nghĩa là nếu bạn có trình xử lý on("click", ...) trên document thì mỗi nhấp chuột trên mọi thành phần trong tài liệu sẽ kết thúc chạy một trình xử lý sự kiện, vì vậy jQuery có thể kiểm tra xem nguồn gốc của nó có phù hợp với mục tiêu đại biểu hay không được chuyển tới trình xử lý sự kiện đó.

Hãy tưởng tượng rằng trang của bạn có 10 trình xử lý sự kiện được ủy quyền khác nhau trên tài liệu, tất cả xử lý các nhấp chuột khác nhau. Mỗi khi bạn nhấp vào bất kỳ phần tử nào trong trang, sự kiện sẽ phát tán đến gốc tài liệu và tất cả 10 trình xử lý đó phải được kiểm tra để tìm ra (nếu có) sẽ được chạy. Nói chung, bạn muốn các sự kiện được ủy nhiệm của bạn càng sâu trong cây càng tốt trong khi vẫn bật chức năng của bạn, vì điều này giới hạn số phần tử có thể gọi sự kiện này và bạn có thể xử lý sự kiện trước đó để ngăn chặn sự kiện đó từ việc nhân lên cây DOM.

0

Điều đó tùy thuộc. Bạn có thể đính kèm trình xử lý cho bất kỳ phần tử nào bạn muốn, và trong một số trường hợp, bạn sẽ phải đính kèm nó vào document hoặc body (ví dụ: nếu muốn nhắm mục tiêu tất cả các liên kết trên trang). Tuy nhiên, nếu bạn chắc chắn rằng các phần tử nhất định sẽ luôn xuất hiện bên trong phần tử đã cho (mà đã được tạo) - thì vì mục đích hiệu suất, bạn có thể đính kèm trình xử lý sự kiện cho cha mẹ chung đó.

0

Vấn đề là quá mức.

IMHO quá đại biểu trên bất kỳ DOM là khủng khiếp

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