header-img
Info :
728x90

 

예λ₯Ό λ“€μ–΄λ³΄μž.

 

μ–΄λ–€ 값을 μž…λ ₯ν•  λ•Œ ν•΄λ‹Ή 단어가 ν¬ν•¨λœ 단어λ₯Ό μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 상황.

= 검색엔진 검색어 μΆ”μ²œ κ²°κ³Ό 같은 κΈ°λŠ₯.

이럴 λ•Œ κΈ€μžκ°€ λ³€ν•  λ•Œλ§ˆλ‹€, μ–΄λ–€ function μ΄λ‚˜ APIλ₯Ό ν˜ΈμΆœν•˜μ—¬μ•Ό ν•˜λŠ”λ°.. λ„ˆλ¬΄ μž¦μ€ ν•¨μˆ˜ 호좜이 μΌμ–΄λ‚œλ‹€.

 

λ¬Όλ‘  ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œμ—μ„œ μ„±λŠ₯ μ΅œμ ν™”κ°€ λ˜μ–΄ 있으면 λ¬Έμ œκ°€ 덜 일어날 μˆ˜λ„ μžˆμœΌλ‚˜..

κ·Έλž˜λ„ λ§ŒμΌμ˜ 문제λ₯Ό μ œκ±°ν•΄μ£ΌλŠ” 것이 μ€‘μš”ν•  것이닀.

 

μ΄λ•Œ 보톡 λ””λ°”μš΄μŠ€ Debounce 와 μ“°λ‘œν‹€λ§ Throttling 의 κ°œλ…μ„ μ μš©ν•˜κ²Œ λ˜λŠ”λ°

이 λ‘κ°€μ§€μ˜ 곡톡점과 차이점에 λŒ€ν•΄ μ μ–΄λ³΄κ³ μž ν•œλ‹€.

 

곡톡점

 

λ””λ°”μš΄μŠ€μ™€ μ“°λ‘œν‹€λ§μ˜ 곡톡점은..

1. ν•¨μˆ˜κ°€ λ„ˆλ¬΄ 많이 ν˜ΈμΆœλ˜μ§€ μ•Šλ„λ‘ μ œμ–΄ν•˜λŠ” ν…Œν¬λ‹‰μ˜ μ’…λ₯˜μ΄λ©°,

2. μ„±λŠ₯ μ΅œμ ν™”μ™€ λ¦¬μ†ŒμŠ€ 관리에 많이 μ‚¬μš©λ˜λŠ” κ°œλ…μ΄λ‹€.

 

Debounce λ””λ°”μš΄μŠ€

 

 

νŠΉμ • μ‹œκ°„ 이후에 ν•œλ²ˆλ§Œ μ‹€ν–‰

μ§€μ •λœ Delay μ•ˆμ— n번의 호좜이 λ°œμƒν•˜λŠ” 경우 λ§ˆμ§€λ§‰ ν•œλ²ˆλ§Œ μ‹€ν–‰ν•˜λ„λ‘ ν•˜λŠ” 방법.

 

기본적으둜 ν•¨μˆ˜ 호좜이 μ§€μ—°λ˜λŠ” κ°œλ…. (λ””λ°”μš΄μŠ€ λ”œλ ˆμ΄κ°€ 1초라면 1번만 클릭해도 1초 후에 μ‹€ν–‰λ˜κ³ , 1초 μ•ˆμ— 100λ²ˆμ„ 클릭해도 100번째 클릭이 싀행됨)

μ§€μ •λœ λ”œλ ˆμ΄ 이전에 ν˜ΈμΆœμ„ μš”μ²­ν•˜κ²Œ 되면 이전 호좜이 μ·¨μ†Œλ˜λŠ” 것이닀.

 

λ™μž‘λ°©μ‹

1. ν•¨μˆ˜ 호좜이 λ””λ°”μš΄μ„œλ₯Ό νŠΈλ¦¬κ±°ν•¨

2. λ””λ°”μš΄μ„œλŠ” μ§€μ •λœ κΈ°κ°„ λ™μ•ˆ 타이머λ₯Ό μ„€μ •

3. 타이머λ₯Ό λκΉŒμ§€ 기닀리기 전에 μƒˆλ‘œμš΄ 호좜이 λ“€μ–΄μ˜€λ©΄ νƒ€μ΄λ¨Έμ˜ μ‹œκ°„μ΄ 처음으둜 μ΄ˆκΈ°ν™”.

4. 타이머가 μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šκ³  λκΉŒμ§€ 기닀리면 ν•¨μˆ˜κ°€ 호좜.

 

μ‚¬μš© μΌ€μ΄μŠ€

1. 검색어 μžλ™μ™„μ„±: μ‚¬μš©μžκ°€ μž…λ ₯을 쀑단할 λ•ŒκΉŒμ§€ 검색 결과에 λŒ€ν•œ API ν˜ΈμΆœμ„ μ§€μ—°μ‹œν‚΄

2. 양식 μœ νš¨μ„± 검사: μ‚¬μš©μžκ°€ 데이터 μž…λ ₯을 λ‹€ 마친 뒀에 μœ νš¨μ„± 검사λ₯Ό μ‹œμž‘ν•˜λŠ” μΌ€μ΄μŠ€ 

3. API 호좜 속도 μ œν•œ: API 호좜이 λ„ˆλ¬΄ μž¦μ€ 경우 μ„œλ²„μ— λΆ€ν•˜κ°€κ°€λ―€λ‘œ λ””λ°”μš΄μŠ€λ‘œ ν˜ΈμΆœμ„ μ œν•œ. 유료 APIλ₯Ό ν˜ΈμΆœν•˜λŠ” κ²½μš°μ— μœ μš©ν•˜κ²Œ μ‚¬μš©λ¨.. γ…Žγ…Ž;

4. μ‹€μˆ˜ 방지: 은행 μ„œλΉ„μŠ€μ˜ 경우 μ†‘κΈˆ μš”μ²­ λ²„νŠΌμ„ μ‹€μˆ˜λ‘œ λ‘λ²ˆ 클릭해도 λ§ˆμ§€λ§‰ ν•œ λ²ˆμ— λŒ€ν•΄μ„œλ§Œ μ‹€μ œλ‘œ μ†‘κΈˆμ΄ μš”μ²­λ¨.

5. λΈ”λ‘œκ·Έ κΈ€μ“°κΈ° 에디터 μžλ™μ €μž₯ κΈ°λŠ₯: κΈ€ μ“°λ‹€κ°€ 일정 μ‹œκ°„λ™μ•ˆ 타이핑이 μ—†μœΌλ©΄ μžλ™μ €μž₯ func.이 돌게 됨.

 

예제

  // λ””λ°”μš΄μŠ€ μ‹œκ°„ 지정
  let debounceTimer=1000;
  
  function debounce(func, delay) {
    return function(){
      clearTimeout(debounceTimer);
      debounceTimer = setTimeout(()=> func.apply(this, arguments), delay);
    }
  }

 

 

 

Throttling μ“°λ‘œν‹€λ§

 

μΌμ •ν•œ κ°„κ²©μœΌλ‘œ ν•œλ²ˆλ§Œ μ‹€ν–‰ν•˜κΈ°

ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” νšŸμˆ˜μ™€ 상관없이 일정 κ°„κ²©μœΌλ‘œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰

 

λ”œλ ˆμ΄λ₯Ό μ£ΌλŠ” 방식은 λ””λ°”μš΄μŠ€μ™€ λ™μΌν•˜μ§€λ§Œ μ„€μ •ν•œ μ‹œκ°„ 내에 좔가적인 ν•¨μˆ˜ 호좜 μš”μ²­μ„ λ¬΄μ‹œν•¨. λ””λ°”μš΄μŠ€μ™€ 달리 λ”œλ ˆμ΄ 값을 μ΄ˆκΈ°ν™”ν•˜μ§€ μ•ŠμŒ.

λ”œλ ˆμ΄κ°€ λλ‚˜λ©΄ ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λŠ” 방식

 

λ™μž‘ 방식

1. ν•¨μˆ˜ 호좜이 μŠ€λ‘œν‹€λ§μ„ 트리거

2. μ„€μ •λœ λ”œλ ˆμ΄ 내에 ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜μ§€ μ•ŠμœΌλ©΄ ν•¨μˆ˜κ°€ 싀행됨

3. λ”œλ ˆμ΄ λ‚΄ μΆ”κ°€ ν˜ΈμΆœμ€ λ¬΄μ‹œ

4. λ”œλ ˆμ΄ 만료 μ‹œ 호좜이 μ‹€ν–‰λ˜κ³  ν”„λ‘œμ„ΈμŠ€κ°€ 반볡됨

 

μ‚¬μš© μΌ€μ΄μŠ€

1. λ¬΄ν•œ 슀크둀: μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€μ„ 내렸을 λ•Œ μ‹€ν–‰λ˜μ§€λ§Œ, 슀크둀둜 μΈμ‹λœ λͺ¨λ“  픽셀에 λŒ€ν•΄ μš”μ²­μ„ λ³΄λ‚΄μ§€λŠ” μ•ŠμŒ

2. μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ: μž¦μ€ μ—…λ°μ΄νŠΈκ°€ 도움이 λ˜μ§€λ§Œ, μ¦‰κ°μ μ΄μ–΄μ„œλŠ” μ•ˆλ˜λŠ” κ²½μš°μ— μœ μš©ν•¨.

 

예제

  let lastcall = 0;
  function throttle(func, delay) {
    return function (){
      const now = new Date().getTime();
      if(now-lastcall < dalay ) return;
      lastcall = now;
      return func.apply(this, arguments);
    }
  }

 

차이점

 

1. μ‹€ν–‰ λΉˆλ„

 -. μ“°λ‘œν‹€λ§μ€ 일정 μ‹œκ°„ μ•ˆμ— ν•œλ²ˆ μ‹€ν–‰λœλ‹€λŠ” 보μž₯이 μžˆμ§€λ§Œ, λ””λ°”μš΄μŠ€μ˜ κ²½μš°λŠ” 일정 μ‹œκ°„λ™μ•ˆ 쀑볡 호좜이 μ—†μ–΄μ•Όμ§€λ§Œ 싀행이 됨

2. μ‚¬μš©μž ν”Όλ“œλ°±

 -. μ“°λ‘œν‹€λ§μ€ 즉각적인 ν”Όλ“œλ°±μ„ μ œκ³΅ν•΄ 슀크둀과 같은 μž‘μ—…μ— 유용. λ””λ°”μš΄μ‹±μ€ UI의 λ°˜μ‘μ„±μ„ λ–¨μ–΄νŠΈλ¦¬μ§€λ§Œ μž‘μ—…μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ ν•¨μˆ˜ ν˜ΈμΆœμ„ λ°©μ§€ν•˜λ €λŠ” κ²½μš°μ— 유용.

3. λ³΅μž‘μ„±

 -. μ“°λ‘œν‹€λ§μ˜ 경우 일반적인 ν•¨μˆ˜ 호좜만 μ œν•œν•˜λ―€λ‘œ κ΅¬ν˜„ν•˜κΈ°κ°€ 더 쉬움.

 -. λ””λ°”μš΄μ‹±μ˜ 경우 타이머와 더 λ³΅μž‘ν•œ 둜직이 ν•„μš”.

 

κ·ΈλŸ¬λ―€λ‘œ...

 

μ‹œκ°„μ— λ―Όκ°ν•œ μž‘μ—…μ€ μ“°λ‘œν‹€λ§μœΌλ‘œ μ²˜λ¦¬ν•˜κ³ ,
μ‹œκ°„μ— λ―Όκ°ν•˜μ§€ μ•Šμ€ μž‘μ—…μ€ λ””λ°”μš΄μŠ€λ‘œ μ²˜λ¦¬ν•˜μž!

 

 

 

λ²ˆμ™Έλ‘œ

Lodash λ‚˜ Rxjs 같은 λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ‘΄μž¬ν•˜λ―€λ‘œ 직접 κ΅¬ν˜„ν•˜κΈ°κ°€ 꺼렀진닀면

μœ„μ˜ λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•΄ μ•Œμ•„λ³΄λŠ” 것도 쒋을 것 κ°™μŒ.

 

728x90
더보기
FRONTEND/React