throttle
함수가 실행되는 빈도를 제한합니다. 반환된 래퍼를 몇 번 호출하든, 실제 함수는 wait 구간마다 최대 한 번만 실행됩니다.
debounce와 짝을 이루는 함수입니다. debounce는 호출이 멈추기를 기다렸다가 한 번 실행하고, throttle은 호출이 계속되는 동안 일정한 간격으로 계속 실행합니다. 스크롤·리사이즈·마우스 이동·진행률 갱신처럼 끊임없이 발생하는 이벤트에 사용합니다.
기본 동작은 호출 즉시 한 번 실행하고(leading edge), 구간이 끝날 때 가장 최근 인자로 한 번 더 실행하는 것(trailing edge)입니다. 옵션으로 각각을 끌 수 있습니다.
leading: false— 즉시 실행하지 않고, 첫 호출은 구간만 열어둔 뒤 구간이 끝날 때 실행됩니다.trailing: false— leading 호출만 실행되고, 구간 중에 발생한 호출은 버려집니다.- 둘 다
falseFalse이면 함수는 실행되지 않습니다.
debounce와 마찬가지로 백그라운드 스레드를 사용해 예약하므로, trailing 호출은 해당 스레드에서 실행됩니다.
Parameters
| 이름 | 타입 | 필수 | 기본값 |
|---|---|---|---|
func | functionFunctionCallable | ● | – |
| 제한할 함수입니다. 래퍼가 받은 인자를 그대로 전달합니다. | |||
wait | numberint | ● | – |
| 구간의 길이(밀리초)입니다. | |||
options named keyword | ThrottleOptions | – | – |
| 아래 표를 참고하세요. | |||
named이 파라미터는 named 파라미터로 전달합니다.
keyword이 파라미터는 키워드 인자로 전달하거나, 대신 dict 하나로 전달합니다.
ThrottleOptions| 이름 | 타입 | 필수 | 기본값 |
|---|---|---|---|
leading | booleanbool | – | trueTrue |
| 구간의 시작 시점에 실행합니다. | |||
trailing | booleanbool | – | trueTrue |
| 구간이 끝날 때 가장 최근 호출의 인자로 한 번 더 실행합니다. | |||
Returns
function
Function
Callable
Examples
javascript
const onScroll = throttle((position) => {
console.log(position);
}, 100);
onScroll(1); // 즉시 실행
onScroll(2); // 버려짐
onScroll(3); // 100ms 구간이 끝날 때 실행
// trailing edge만 사용
const save = throttle(sendToServer, 1000, { leading: false });
// leading edge만 사용
const track = throttle(sendEvent, 1000, { trailing: false });dart
final onScroll = throttle((position) {
print(position);
}, 100);
onScroll([1]); // 즉시 실행
onScroll([2]); // 버려짐
onScroll([3]); // 100ms 구간이 끝날 때 실행
// trailing edge만 사용
final save = throttle(sendToServer, 1000, leading: false);
// leading edge만 사용
final track = throttle(sendEvent, 1000, trailing: false);python
on_scroll = throttle(lambda position: print(position), 100)
on_scroll(1) # 즉시 실행
on_scroll(2) # 버려짐
on_scroll(3) # 100ms 구간이 끝날 때 실행
# trailing edge만 사용
save = throttle(send_to_server, 1000, {'leading': False})
# leading edge만 사용
track = throttle(send_event, 1000, trailing=False)