Phân biệt debounce và throttle

Bài viết được sự cho phép của tác giả Lưu Bình An

debounce

Được sử dụng để delay việc thực thi một hàm nào đó. Ví dụ khi user nhập vào ô search, chúng ta không thực thi ngay câu lệnh tìm kiếm mà đợi một khoảng thời gian sau khi user đã ngừng việc nhập.

Phân biệt debounce và throttle

Có thể hình dung cái thang máy, cửa chuẩn bị đóng, nếu có người đưa chân vào nó sẽ không chạy liền, mà cho người đó vào rồi mới chạy.

  Debug và khắc phục lỗi hiển thị ký tự Unicode của ứng dụng Web
  Lập trình đa luồng trong Java (Java Multi-threading)

throttle

Trong khoản thời gian đã chỉ định, chỉ thực thi hàm 1 lần duy nhất, bỏ qua mọi lần gọi khác. Ví dụ như user click liên tục vào nút search để gọi API, chúng ta chỉ thực thì đúng lần đầu, các lần click tiếp theo chúng ta cho qua và không gọi API.

Một ví dụ khác làm infinite-scroll, khi user đã load đến vị trí gần cuối trang, chúng ta sẽ đi lấy thêm dữ liệu, chúng không đợi đến khi user đã đến cuối trang. debounce sẽ không hữu ích vì nói chỉ cho thực thi khi user stop việc scroll. throttle sinh ra cho việc này.

Rất hữu dụng khi cần gắn các sự kiện vào DOM. Vì chúng ta có thể hạn chế bớt số lần thực thi không cần thiết.

Ví dụ với sự kiện scroll, nếu chúng ta bắt onScroll để thực thi một hành động, số lần thực thi sẽ rất lớn. Đây là vấn đề vào năm 2011 của Twitter, user khi scroll trên điện thoại sẽ chậm và tệ nhất là memory leak luôn.

Nên sử dụng thư viện có sẵn nếu cần, như lodash, đừng tự viết lại.

requestAnimationFrame

Là một API của trình duyệt, tương tự như _.throttle(doSomething, 16)

Sinh ra để đáp ứng chạy cho thật mượt (đảm bảo 60fps).

Khi sử dụng cần tự viết việc start/cancel

IE9 không hỗ trợ

Ghi chú từ Debouncing and Throttling Explained Through Examples

Bài viết gốc được đăng tải tại vuilaptrinh.com

Có thể bạn quan tâm:

Xem thêm tuyển it không yêu cầu kinh nghiệm trên TopDev