Language/JavaScript

JavaScript] λ””λ°”μš΄μ‹±(Debouncing) & μ“°λ‘œν‹€λ§(Throttling)

μ™•κ°€πŸ‘ 2023. 7. 15. 18:23
728x90
λ°˜μ‘ν˜•

JSμ—μ„œ μ΅œμ ν™”μž‘μ—…? 에 κ°€κΉŒμš΄ κ°œλ…μž…λ‹ˆλ‹€.

λ”°λ‘œ μ˜μ‹ν•˜κ±°λ‚˜ κ°œλ…μ„ μ•Œκ³  κ°œλ°œν•œ 적은 μ—†λŠ”λ°, μ΄λ²ˆκΈ°νšŒμ— 저도 μ°Ύμ•„λ³΄λ©΄μ„œ κ³΅λΆ€ν•˜κ³ 

μ•žμœΌλ‘œμ˜ κ°œλ°œμ— μžˆμ–΄ 쒋은 밑거름이 될 λ“―μ‹ΆμŠ΅λ‹ˆλ‹€.

 

 


 

 

λ””λ°”μš΄μ‹±(Debouncing)

λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜λŠ” 이벀트λ₯Ό νŠΉμ • μ‹œκ°„ 이후에 ν•œ 번만 μ‹€ν–‰μ‹œν‚€λ©΄ λ˜λŠ” μ΅œμ ν™” κΈ°λ²•μž…λ‹ˆλ‹€.

 

 


 

 

μ˜ˆμ‹œ

κ°„λ‹¨ν•œ μ˜ˆμ‹œλ‘œ μ„€λͺ…λ“œλ¦¬λ©΄, νšŒμ›κ°€μž… νŽ˜μ΄μ§€κ°€ μžˆλ‹€κ³  생각해 λ΄…μ‹œλ‹€.

νšŒμ›κ°€μž… 정보 μž…λ ₯ ν›„, submitλ²„νŠΌμ„ 눌러 μ œμΆœν•˜λŠ”λ° 이 λ²„νŠΌμ„ κ΄‘ν΄ν•΄μ„œ 500ms에 5번 ν΄λ¦­ν•˜κ²Œ 되면, post둜 데이터가 5번 μ „λ‹¬ν•˜κ²Œ 될 κ²ƒμž…λ‹ˆλ‹€. 

μ—¬κΈ°μ„œ λ””λ°”μš΄μ‹± κ°œλ…μ„ μ‚¬μš©ν•΄μ„œ νŠΉμ • μ‹œκ°„μ„ 500ms둜 μ„€μ •ν•˜κ²Œ 되면, 500ms λ™μ•ˆ ν΄λ¦­ν•œ 5번이 μ „λΆ€ μ „λ‹¬λ˜λŠ” 게 μ•„λ‹ˆλΌ λ§ˆμ§€λ§‰ 1번만 전달 되게 ν•¨μœΌλ‘œμ¨ 효율적으둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 


 

 

주둜 어디에 μ‚¬μš©ν• κΉŒ?

λ””λ°”μš΄μ‹±μ€ μ„±λŠ₯도 효율적으둜 λ§Œλ“€μ§€λ§Œ, 유료 APIλ₯Ό μ‚¬μš©ν•  λ•Œ 큰 효과λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” React만 κ°œλ°œν•˜κ³  있고, 주둜 μ˜€ν”ˆ API만 μ‚¬μš©ν•΄μ„œ 유료 APIλ₯Ό μ‚¬μš©ν•΄ λ³Έ 적은 μ—†μ§€λ§Œ,

λ””λ°”μš΄μ‹±μ„ λ¬΄μ‹œν•˜κ³  κ°œλ°œν•˜κ²Œ 되면 클릭 ν•œ λ²ˆμ— μ‚¬μš©λ£Œλ₯Ό μ§€λΆˆν•΄μ•Ό 되기 λ•Œλ¬Έμ— 크리티컬 ν•œ μ΄μŠˆκ°€ λ°œμƒν•  κ²ƒμž…λ‹ˆλ‹€.

주둜 검색할 λ•Œ μ‚¬μš©λœλ‹€κ³  ν•©λ‹ˆλ‹€.

 

 


 

 

728x90

 


 

 

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

μ‚¬μš©μžκ°€ 이벀트λ₯Ό λͺ‡ λ²ˆμ„ λ°œμƒμ‹œν‚€λ“  μΌμ •ν•œ μ‹œκ°„ κ°„κ²©μœΌλ‘œ ν•œ 번만 μ‹€ν–‰ν•˜λ„λ‘ ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.

 

 


 

 

μ˜ˆμ‹œ

μ‚¬μš©μžκ°€ 이벀트λ₯Ό 연달아 μ‹€ν–‰ν–ˆμ„ λ•Œ, μ“°λ‘œν‹€λ§κΈ°λ²•μ„ μ‚¬μš©ν•˜λ©΄ λ§ˆμ§€λ§‰ν•¨μˆ˜λ₯Ό 기닀리지 μ•Šκ³ , 첫 번째 클릭에 μ˜ν•œ 이벀트만 μ‹€ν–‰ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” λ¬΄μ‹œν•˜κ²Œ λ©λ‹ˆλ‹€.

μ€‘μš”ν•œ ν¬μΈνŠΈλŠ” λ””λ°”μš΄μ‹±κ³Ό 달리 첫 번째 1번만 μ‹€ν–‰λœλ‹€λŠ” μ μž…λ‹ˆλ‹€.

 

 


 

 

주둜 어디에 μ‚¬μš©ν• κΉŒ?

짧은 주기둜 μ‹€ν–‰λ˜λŠ” μ΄λ²€νŠΈμ— μ‚¬μš©λœλ‹€κ³  ν•©λ‹ˆλ‹€. μŠ€ν¬λ‘€μ΄λ‚˜ 마우슀 μ›€μ§μž„κ°™μ΄ μ—°μ†μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” κ³³μ΄λ‚˜, λ²„νŠΌμ„ μ—¬λŸ¬λΆ„ λˆ„λ₯Ό κ²½μš°κ°€ μžˆλŠ” κ³³?으둜 λ³΄μ‹œλ©΄ 쒋을 κ±° κ°™μŠ΅λ‹ˆλ‹€.

 

 

 


 

 

예

 

 

κ°„λ‹¨ν•˜κ²Œ μ˜ˆμ‹œλ‘œ counterλ₯Ό λŠ˜λ €λ³΄λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

λ””λ°”μš΄μ‹± 같은 κ²½μš°λŠ” 계속 λˆ„λ₯΄κ²Œ 되면 clearλ₯Ό κ³„μ†ν•˜λ‹€κ°€ λ§ˆμ§€λ§‰ 이벀트만 μ‹€ν–‰ν•˜κ²Œ 되고,

μ“°λ‘œν‹€λ§ 같은 κ²½μš°λŠ” μ²˜μŒμ— λˆ„λ₯Έ λ’€λ‘œ 계속 undefined둜 μ΄ˆκΈ°ν™”ν•΄μ£Όκ²Œ λ©λ‹ˆλ‹€.

 

 


 

 

λ””λ°”μš΄μ‹±μ΄λ”λ‹ˆ μ“°λ‘œν‹€λ§μ΄λ˜ κ°œλ…μ„ 갖지 μ•Šκ³ , κ°œλ°œν•˜λ‹€ 보면 즉ν₯적으둜 μ‚¬μš©ν•  λ²•ν•œ 기법인 κ±° κ°™μŠ΅λ‹ˆλ‹€.
μ€‘λ³΅μ²˜λ¦¬λ₯Ό 막기 μœ„ν•œ κ²ƒμ΄λ‹ˆκΉ..
μ΄λ²ˆκΈ°νšŒμ— μ •ν™•ν•œ μš©μ–΄μ™€ κ°œλ…μ„ 작고 λ„˜μ–΄κ°€λ©΄ 쒋은 κ±° κ°™μŠ΅λ‹ˆλ‹€.

 

 

728x90