jQuery UI Autocomplete Combobox Very Slow With Large Select Lists

前端 未结 5 1318
清歌不尽
清歌不尽 2020-12-04 05:45

I\'m using a modified version of the jQuery UI Autocomplete Combobox, as seen here: http://jqueryui.com/demos/autocomplete/#combobox

For the sake of this questio

5条回答
  •  时光说笑
    2020-12-04 05:54

    I've modified the way the results are returned (in the source function) because the map() function seemed slow to me. It runs faster for large select lists (and smaller too), but lists with several thousands of options are still very slow. I've profiled (with firebug's profile function) the original and my modified code, and the execution time goes like this:

    Original: Profiling (372.578 ms, 42307 calls)

    Modified: Profiling (0.082 ms, 3 calls)

    Here is the modified code of the source function, you can see the original code at the jquery ui demo http://jqueryui.com/demos/autocomplete/#combobox. There can certainly be more optimization.

    source: function( request, response ) {
        var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
        var select_el = this.element.get(0); // get dom element
        var rep = new Array(); // response array
        // simple loop for the options
        for (var i = 0; i < select_el.length; i++) {
            var text = select_el.options[i].text;
            if ( select_el.options[i].value && ( !request.term || matcher.test(text) ) )
                // add element to result array
                rep.push({
                    label: text, // no more bold
                    value: text,
                    option: select_el.options[i]
                });
        }
        // send response
        response( rep );
    },
    

    Hope this helps.

提交回复
热议问题