Menu
Menu
Posts List
  1. RxSwift :
    1. 차이점
    2. debounce 예시
    3. throttle 예시

Debounce와 Throttle

RxSwift :

RxSwift에서 debouncethrottle은 이벤트의 빈도를 제어하기 위해 사용하는 시간 기반 연산자이다. 두 연산자는 비슷해 보일 수 있지만 동작 방식과 사용 목적이 다른데, 이를 보다 자세히 구분하기해서 작성!


차이점

구분 debounce throttle
의미 지정한 시간 동안 새로운 이벤트가 없을 때, 가장 마지막 이벤트만 방출 지정한 시간 동안 첫 번째 이벤트만 방출하고, 이후 이벤트는 무시
목적 최종 입력만 반영 이벤트 속도 제한
사용 시점 사용자 입력이 끝났을 때 감지 연속된 이벤트를 일정 간격으로 제한하고 싶을 때
무시 방식 시간 내 발생한 모든 이벤트 무시, 마지막 하나만 방출 주어진 시간 동안 처음 하나만 허용, 이후는 무시
대표 사용 예 검색 자동완성, 키 입력 감지 버튼 연타 방지, 중복 API 호출 방지

debounce 예시

1
2
3
4
5
self.textField.rx.text
.debounce(.milliseconds(500), scheduler: MainScheduler.instance)
.distinctUntilChanged()
.subscribe(onNext: { print("검색어: \($0)") })
.disposed(by: self.disposeBag)
  • 사용자가 입력을 멈춘 후 0.5초가 지나면 마지막 입력만 전달되는 예시

throttle 예시

1
2
3
4
5
self.downloadButton.rx.tap
.throttle(.milliseconds(600), scheduler: MainScheduler.asyncInstance)
.map { Reactor.Action.download }
.bind(to: reactor.action)
.disposed(by: self.disposeBag)
  • 버튼이 연속적으로 눌려도, 0.6초 간격으로 한 번만 이벤트가 발생되는 예시