在尝试使用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函数”。