본문 바로가기
vue.js/기술

[vue] debounce 사용하기 feat.(throttle)

by 냉면돈가스 2022. 3. 16.

debounce와 throttle의 공통 키워드로는 '연속성' 입니다.

우리는 특정 함수를 호출할 시,

이벤트리스너와 관련된( ex: scroll )함수를 호출할 시

해당 이벤트들이 너무 연속적으로 수행될 때가 있습니다.

 

debounce와 throttle은 이를 방지하기 위한 기술입니다.

 

 - debounce

    이벤트를 호출한 후, 일정시간이 지나야 해당 실행문장을 실행합니다

    => 키를 입력하면 값이 출력되는 이벤트를 호출한다 가정했을시,

         마지막에 입력했을 때를 기점으로 설정한 시간만큼 재호출이 없어야 실행문장이 실행됩니다.

 

 - throttle

    이벤트를 호출한 후, 실행문장을 한 번 실행하고, 

    설정한 시간만큼은 재호출을 해도 응답하지 않습니다.

 


 

<template>
  <input type="text" v-model="debounceValue" @keyup="debounceMethods($event)">
  <input type="text" v-model="throttleValue" @keyup="throttleMethods($event)">
</template>

<script>

import { debounce, throttle } from 'lodash'
export default {
  name: 'App',
  data() {
    return {
      debounceValue: '',
      throttleValue: ''
    }
  },
  methods: {
    debounceMethods: debounce((event) => {
      console.log(event.target.value)
    },2000),
    throttleMethods: throttle((event) => {
      console.log(event.target.value)
    },2000)
  }
}
</script>

 

 


 

1. lodash를 설치 후 가져와 사용

2. debounce는 이벤트 호출 후, 2초동안 추가 호출이 없다면 실행문장이 실행된다.

 

3. throttle은 이벤트 호출 후, 실행문장을 실행한다. 그 다음 2초동안 제일 마지막으로 호출한 명령을 수행한다.

 

 

 

 


 

eventListener로 이벤트를 줄 시에 위 기능을 쓰고 싶다면

window.addEventListener('scroll', throttle(() => {
        실행문장();
    }, 1000));

 

 

'vue.js > 기술' 카테고리의 다른 글

차세대 빌드 도구 vite (vue)  (1) 2022.04.07
[vue] 이벤트 버블링 관련 수식어  (0) 2022.03.17
[vue] $nextTick 사용하기  (0) 2022.03.16
[vue] emit을 props처럼 관리하기  (0) 2022.02.24
[vue] provide / inject  (2) 2022.01.19

댓글