Người nghe sự kiện thụ động là gì?


180

Trong khi làm việc xung quanh để tăng hiệu suất cho các ứng dụng web tiến bộ, tôi đã Passive Event Listenerstìm thấy một tính năng mới và tôi thấy khó hiểu khái niệm này.

Những gì là Passive Event Listenersvà cần phải có nó trong các dự án của chúng tôi là gì?


Câu trả lời:


212

Trình lắng nghe sự kiện thụ động là một tiêu chuẩn web mới nổi, tính năng mới được cung cấp trong Chrome 51 cung cấp một tiềm năng lớn cho hiệu suất cuộn. Ghi chú phát hành Chrome.

Nó cho phép các nhà phát triển chọn tham gia để thực hiện cuộn tốt hơn bằng cách loại bỏ nhu cầu cuộn để chặn người nghe sự kiện cảm ứng và bánh xe.

Vấn đề: Tất cả các trình duyệt hiện đại đều có tính năng cuộn theo luồng để cho phép cuộn chạy trơn tru ngay cả khi JavaScript đắt tiền đang chạy, nhưng tối ưu hóa này bị đánh bại một phần do phải chờ kết quả của bất kỳ touchstarttouchmovetrình xử lý nào, có thể ngăn cuộn hoàn toàn bằng cách gọi preventDefault()vào sự kiện.

Giải pháp: {passive: true}

Bằng cách đánh dấu một người nghe cảm ứng hoặc bánh xe là thụ động, nhà phát triển hứa hẹn người xử lý sẽ không gọi preventDefaultđể vô hiệu hóa cuộn. This frees the browser up to respond to scrolling immediately without waiting for JavaScript, thus ensuring a reliably smooth scrolling experience for the user.

document.addEventListener("touchstart", function(e) {
    console.log(e.defaultPrevented);  // will be false
    e.preventDefault();   // does nothing since the listener is passive
    console.log(e.defaultPrevented);  // still false
}, Modernizr.passiveeventlisteners ? {passive: true} : false);

DOM Spec , Video Demo , Tài liệu giải thích


1
vì vậy chúng ta nên luôn luôn thêm dòng mã này (ít nhất là trong hầu hết các trường hợp), phải không?
Altiano Gerung

Điều này làm hỏng công cụ js của bạn trong Mozilla. Bạn nên phát hiện trình duyệt trước khi đính kèm trình nghe sự kiện này
yardpenalty.com

@AltianoGerung Khi trình duyệt giới thiệu nó. Bạn sẽ thấy thông báo trong tab Thông tin hoặc Cảnh báo của Bảng điều khiển.
snowYetis

@ yardpenalty.com Chúng tôi có thể sử dụng polyfill sau và tránh kiểm tra trình duyệt. Đối với các trường hợp sử dụng cuộn, sử dụng trình nghe sự kiện thụ động là một điểm cộng lớn. github.com/WICG/EventListenerOptions/blob/gh-pages/iêu
Vikrant Siwach

@Vikrant Siwach lời khuyên tuyệt vời. Polyfill rất nhanh và hơi đau khi bạn quản lý tất cả chúng trong giả sử polyfill.js
yardpenalty.com
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.