!빵동여지도 앱을 개발하면서 빵집 검색에 있어서 타이핑이 될 때마다 즉시 서버 통신으로 받아오게끔 로직을 짰는데 이 부분에서 서버에 큰 부하를 주게 된다는 점을 알려주시며 debounce를 추천해주셨다.
여러 이벤트가 발생할 때 이 이벤트를 일정 그룹으로 묶어서 하나로 처리하는 것.
주로 실시간 검색에서 사용되는데 우리가 네이버와 같은 검색 엔진에서 검색 할때 밑에 관련 검색어가 나타난다!
이때 하나의 타이핑 입력할 때마다 서버에 요청하게 되면 그만큼 서버에 부하를 주기 때문에 이를 타이핑이 입력되고 0.7초 0.5초 이런식으로 이벤트가 없을 경우 서버에 데이터를 요청하도록 하는 것이다!
만약 설정한 시간안에 새로운 이벤트(타이핑)을 할 경우 전에 입력했던 이벤트는 취소된다!
코루틴을 이용해서 구현했다!
fun <T> debounce(
timeMillis: Long = 300L,
coroutineScope: CoroutineScope,
block: (T) -> Unit
): (T) -> Unit {
var debounceJob: Job? = null
return {
debounceJob?.cancel()
debounceJob = coroutineScope.launch {
delay(timeMillis)
block(it)
}
}
}