在大型数据集的IE6中,YUI中的自动完成非常慢

时间:2010-02-26 20:49:55

标签: javascript autocomplete yui

尝试使用YUI的自动完成功能时,我们遇到这样一个事实:对于包含30000个项目的数据源, IE6 非常缓慢(当尝试输入自动完成时)字段,IE需要几个MINUTES来响应)。

然而,相同的确切代码在IE8中几乎可以实时运行。

我们做错了吗?我们可以以某种方式优化它吗? IE6 + YUI自动完成是不是设计用于这么大的数据集?

这是我们的代码初始化自动完成程序:

Y.namespace( 'YAHOO.program' );
Y.program.AllTreeItemsArr = new Array();
// Populate the array with 30000 elements
Y.program.BasicLocal = function() {
        var oDS = new YU.LocalDataSource(Y.program.AllTreeItemsArr);
        oDS.responseSchema = {fields : ["portfolio"]};
        var oAC = new Y.widget.AutoComplete("selected"
                                          , "autocomplete_container", oDS);
        oAC.prehighlightClassName = "yui-ac-prehighlight";
        oAC.useShadow = true;
        oAC.typeAhead = true;
        oAC.queryDelay = .05;
        oAC.typeAheadDelay = .5;

        return {
            oDS: oDS,
            oAC: oAC
        };
     }();

这是使用它的HTML:

    <span id="port_autocomplete" class="yui-skin-sam" style='position: relative;'>
         <input type='text' id='selected' maxlength=10 name='selected'
                value='' isSelected=1 onkeyup="searchOnEnter();">
         <div id="autocomplete_container" style="position: absolute"></div>
    </span>

searchOnEnter函数是标准的“捕获按键并执行搜索JS函数,如果键== 13”。

1 个答案:

答案 0 :(得分:1)

显而易见的答案是IE有一个缓慢的JS引擎,30000条记录是很多数据。但是,过滤操作确实包含一个可能是您麻烦的根源的呼叫。试试这个补丁,看看它是否有所作为:

http://gist.github.com/316358