2013-08-14 39 views
5

Tôi đang làm việc trên một adminarea nhỏ cho một trang web.jQuery bind() unbind() và bật() và tắt()

Có ý nghĩa để hủy liên kết sự kiện để tăng hiệu suất (ứng dụng khách) không? Hay nó có chi phí hiệu suất cao hơn để unbind sự kiện và ràng buộc nó 30 giây sau một lần nữa?

Câu hỏi của tôi: Ý tưởng đằng sau bind() - unbind() hoặc on(). Off() chỉ tăng hiệu suất của khách hàng hoặc tôi có nên sử dụng nó cho các tình huống khác không? Câu hỏi này xuất phát vì mã javascript của tôi đang phát triển và tăng trưởng (khoảng 30%) do sự kiện không liên kết. Và tôi nghĩ rằng, một số điều có thể không hoạt động, khi người dùng tương tác không, như tôi muốn ...

.

EDIT: Các lần bấm im/unbinding lần bấm nhiều sự kiện, vì tôi cần các phím mũi tên để tìm khác biệt. kịch bản.

+3

Nếu bạn chưa thực hiện các phép đo thực tế, việc thêm mã vì lý do hiệu suất không có ý nghĩa nhiều. – Pointy

+0

Tôi có thể đo lường bằng cách nào? –

+2

Các công cụ dành cho nhà phát triển Chrome và Firebug dành cho Firefox đều có trình thu thập thông tin. Nó là khá nghi ngờ rằng xử lý sự kiện dư thừa sẽ gây ra bất kỳ vấn đề hiệu suất, nhưng profiler sẽ là cách để tìm hiểu. – Pointy

Trả lời

4

Nếu bạn cố gắng ràng buộc và hủy liên kết, bạn đang tạo điều kiện cuộc đua cho người thu gom rác để thực sự đến và dọn sạch mã của bạn. Tốt nhất là ràng buộc một lần và không phải ràng buộc lại. Nếu phía khách hàng của bạn dự kiến ​​sẽ chạy trong một thời gian dài (tuần, tháng) thì bạn nên xem xét việc quản lý bộ nhớ và rò rỉ bộ nhớ vì có nhiều lo ngại về hiệu suất.

Binding-unbinding (nếu không được thực hiện đúng) có thể tạo ra rò rỉ bộ nhớ khó tìm. Nếu bạn đang sử dụng webkit, hãy chụp nhanh heap của hiệu suất của bạn với unbinding và ràng buộc một lần và sau đó bạn có thể đưa ra quyết định tốt nhất.

Dưới đây là một liên kết: chỉ

http://addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools/

5

unbinding để ràng buộc một lần nữa cho lý do hiệu suất có lẽ là lỗi dễ xảy ra và làm cho mọi thứ quá phức tạp trong hầu hết các trường hợp. Thay vì trình lắng nghe sự kiện ràng buộc trên nhiều phần tử DOM cụ thể, bạn có thể sử dụng cách tiếp cận "chim mắt" hơn và chỉ ràng buộc một vài người nghe gần đầu cây DOM, sau đó khi sự kiện được kích hoạt, hãy kiểm tra xem đã nhấp.

Bằng cách đó bạn sẽ không chi tiêu CPU vào việc ràng buộc/hủy liên kết nhiều trình xử lý sự kiện, nhưng thay vào đó hãy nhấn một CPU nhỏ khi sự kiện được xử lý (thường không đáng chú ý).

này được trình bày chi tiết ở đây: event delegation vs direct binding when adding complex elements to a page

1

Một giải pháp để tránh phải lo lắng về điều này, đặc biệt là nếu bạn đối phó với thay đổi liên tục các yếu tố hoặc với số lượng lớn, là để đăng ký sự kiện của bạn với cơ thể và sau đó xác định một đối số bộ chọn.

Như thế này:

$("body").on("click", ".my-actual-element", function(aEvent) { 
    // Event handler code goes here. 
}); 

Xem thêm ở đây $.on().