代码之家  ›  专栏  ›  技术社区  ›  DVK

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

  •  0
  • DVK  · 技术社区  · 15 年前

    在尝试使用yui的自动完成功能时,我们发现 极其 慢慢来 IE6 对于包含30000个项目的数据源(在尝试键入自动完成字段时,IE需要几分钟的时间来响应)。

    然而,在IE8中,相同的精确代码几乎可以实时工作。

    我们做错什么了吗?我们能以某种方式优化它吗?ie6+yui autocomplete不是为这样大的数据集而设计的吗?

    下面是初始化自动完成器的代码:

    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 函数是标准的“如果key==13,则捕获一个按键并执行一个搜索JS函数”。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Luke    15 年前

    显而易见的答案是IE有一个较慢的JS引擎,30000条记录是大量数据。但是,筛选操作确实包含一个可能是问题根源的调用。试试这个补丁,看看是否有什么不同:

    http://gist.github.com/316358

    推荐文章