throttle vs debounce : 이벤트 최적화 기법

jsonLee·2023년 11월 18일
0
post-thumbnail

서론

웹 개발에서 이벤트 처리는 중요한 부분이다. 사용자의 입력, 스크롤등 다양한 이벤트가 발생할 때마다 적절한 반응이 필요하다. 하지만, 이러한 이벤트들이 과도하게 자주 발생한다면 성능 문제로 이어질 수 있다. 이를 해결하기 위해 Throttle과 Debounce라는 두 가지 기법이 필요하다.

Throttle

Throttle은 함수의 호출 빈도를 제한하는 기법이다. 이는 지정된 시간 간격으로 이벤트를 처리한다 . 예를 들어, 스크롤 이벤트를 처리할 때 유용하다. Throttle을 사용하면 이벤트가 발생하는 동안 일정 시간 간격으로만 함수가 실행되기 때문에, 불필요한 처리를 최소화하고 성능을 향상시킬 수 있다.

import React, { useEffect } from 'react';
import { throttle } from 'lodash';

const ScrollComponent = () => {
    const handleScroll = throttle(() => {
        console.log(`Scroll position: ${window.scrollY}`);
        // 스크롤 처리 로직
    }, 200);

    useEffect(() => {
        window.addEventListener('scroll', handleScroll);

        return () => {
            window.removeEventListener('scroll', handleScroll);
        };
    }, []);

    return (
        <div>
            <h1>스크롤하여 테스트하세요</h1>
        </div>
    );
};

Debounce

Debounce는 이벤트가 연속해서 발생할 때 마지막 이벤트만을 처리한다. 예를 들어 사용자의 입력이 완료되었다고 판단되는 지점에서만 함수를 실행한다. 예를 들어, 사용자가 검색창에 타이핑을 할 때마다 검색을 실행하는 대신, 타이핑이 완료된 후에 검색을 실행하고자 할 때 Debounce를 사용한다.

import React, { useState } from 'react';
import { debounce } from 'lodash';

const SearchComponent = () => {
    const [query, setQuery] = useState('');

    const handleSearch = debounce((searchQuery) => {
        console.log(`Search for: ${searchQuery}`);
        // 검색 로직 또는 API 호출
    }, 500);

    const handleChange = (event) => {
        setQuery(event.target.value);
        handleSearch(event.target.value);
    };

    return (
        <input type="text" value={query} onChange={handleChange} />
    );
};

Throttle과 Debounce의 주요 차이점

Throttle은 지정된 시간 간격마다 함수를 실행한다. 이는 지속적인 이벤트에 대해 과도한 반응을 줄이는 데 적합하다. 반면, Debounce는 이벤트가 연속해서 발생할 때 마지막 이벤트만을 처리한다. 이는 사용자의 입력이 끝난 것으로 간주되는 시점에 적합하다.

결론

Throttle과 Debounce는 이벤트 기반 프로그래밍에서 성능을 최적화하는 데 필수적인 도구이다. 각각의 특성을 이해하고 적절한 상황에 맞게 사용한다면, 웹 애플리케이션의 반응성과 성능을 크게 향상시킬 수 있다. Throttle은 지속적인 이벤트 처리에, Debounce는 사용자의 입력이 끝나는 시점을 감지하는 데 유용하게 사용된다.

profile
풀스택 개발자

0개의 댓글