테스트 사이트 - 개발 중인 베타 버전입니다

디바운스 debounce의 개념

· 11개월 전 · 700 · 1

특정 환경에선 디바운스라는것이 필요합니다 ex) autocomplete

 

검색등을 할때 한글자치면 자동으로 검색툴팁이 내려오는것을 본적이 있으실텐데

 

잘못만들면 무엇을 검색할때 자음단위로 검색하게 됩니다.

 

안녕하세요 -> ㅇㅏㄴㄴㅕㅇㅎㅏㅅㅔㅇㅛ -> 12번의 호출을 하게되겠죠. 그럴경우 

 

특정 시간내의 재호출되는걸 막는것을 디바운스라고 합니다.

 

같은 개념으로 키보드에서도 디바운싱이라는 개념이 같은 원리 입니다.

 

아래는 autocomplete 디바운싱에 샘플코드 입니다.

 

$("#barcode").autocomplete({

    source: [],

    select: function(event, ui) {

        setTimeout(() => {

            $('#barcode').val(ui.item.value);

        }, 50);

    },

    change: function(event, ui) {

        return false;

    },

    focus: function(event, ui) {

        return false;

    },

    create: function() {

        // Autocomplete가 생성될 때의 처리

        $(this).data('ui-autocomplete')._renderItem = function(ul, item) {

            return $("<li>")

                .append('<div><img class="material-img" src="' + item.img + '" /><span>' + item.label + '</span></div>')

                .appendTo(ul);

        };

    }

}).on("keyup", debounce(function(event) {

    var name = event.target.value;

    var codes = [13, 27, 37, 38, 39, 40];

    if (codes.indexOf(event.keyCode) > -1) {

        return;

    }

 

    $.ajax({

        type: 'post',

        async: false,

        dataType: "json",

        data: {

            'mode': 'itemSearch',

            'name': name

        },

        success: function(data) {

            $("#barcode").autocomplete("option", "source", data).autocomplete("search");

        }

    });

}, 500));

 

function debounce(func, delay) {

    let timer;

    return function() {

        clearTimeout(timer);

        timer = setTimeout(() => {

            func.apply(this, arguments);

        }, delay);

    };

}

 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 1개

감사합니다.

게시글 목록

번호 제목
17819
17818
17817
17816
17814
17811
17810
17809
17808
17803
17799
17798
17797
17795
17794
17793
JavaScript JSON Beautify
17790
17789
17786
17774
17760
17755
17750
17729
17722
17714
17708
17686
17676
17666