[트러블 슈팅] Button Throttle

z-wook·2023년 11월 16일
0

트러블 슈팅

목록 보기
6/6
post-thumbnail

문제 상황

로그인, 찜, 차단과 같이 서버와 통신이 필요한 버튼은 터치할 때마다 통신이 일어나기 때문에 불필요한 통신이 발생하거나, 의도하지 않은 동작이 발생한다.


문제 상황까지의 순서

  1. 버튼을 연속적으로 여러 번 터치
  2. 터치한 수만큼 서버와 통신을 시도
  3. 불필요한 통신이 발생하거나 의도하지 않은 동작 발생

문제 상황의 코드

// 찜 하기 버튼 action
@objc func pickPressed() {
	// Firebase와 통신
}

원인 추론

유저의 연속된 버튼 터치


수정 및 조치

  • 버튼 터치 시 일정 시간 동안 다음 클릭을 무시하도록 설정하여, 연속된 클릭을 방지한다.
  • 버튼에 throttle을 적용하면 여러 번의 연속된 터치로 인해 발생할 수 있는 의도하지 않은 동작을 방지하고, 네트워크 트래픽을 줄이고 서버에 부하를 줄일 수 있다.

⭐️ 문제 해결 ⭐️

import UIKit

extension UIButton {
    static let throttleDelay: Double = 0.5
    
    func throttle(delay: Double = UIButton.throttleDelay) {
        isEnabled = false
        let deadline = DispatchTime.now() + delay
        DispatchQueue.main.asyncAfter(deadline: deadline) { [weak self] in
            guard let self = self else { return }
            self.isEnabled = true
        }
    }
}
// 찜 하기 버튼 action
@objc func pickPressed(sender: UIButton) {
	sender.throttle()
    // throttle 이후 서버와 통신
}

유저가 버튼을 터치하면 버튼을 비활성화하고, 1초 뒤에 버튼을 활성화하는 throttle을 적용해서 해결!

profile
🍎 iOS Developer

0개의 댓글