jquery autocomplete - 使用远程数据源的慢响应

时间:2012-05-07 19:38:46

标签: jquery jquery-ui jquery-ui-autocomplete

我正在使用远程数据源,这是一个数据库查询。查询的最大结果是1000.我使用“term”参数来过滤我的结果,但响应很慢。它实际上对2个字符来说并不算太糟糕,但是如果你输入一个字母,它几乎要花3秒才能返回。我从YUI切换到jquery。使用相同的数据源,YUI让我的工作速度更快。响应是1个字符的即时响应。有一个更好的方法吗?代码如下。

$(function() {

    $("#xContact").autocomplete({
        minLength: 1,
        source: "<$strLower(HttpWebRoot)$>data/employee_lookup.php",
        focus: function( event, ui ) {
            $( "#xContact" ).val( ui.item.label );
            return false;
        },
        select: function( event, ui ) {
            $( "#xContact" ).val( ui.item.label );
            return false;
        }
    })
    .data( "autocomplete" )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( "<a>" + item.label + "<br><span style='font-size:0.8em'>" + item.desc + "</span></a>" )
            .appendTo( ul );
    };
});

1 个答案:

答案 0 :(得分:1)

我认为这是处理远程数据源的库的问题

我的推理:我使用本地数据源使用完全相同的代码,包含更多数据,并立即在1个字符上呈现。我知道这不是我的远程数据源。如果我直接浏览执行查询的服务器端页面,它会立即呈现结果。其中一个建议是它很慢,因为它为每个结果操纵DOM。嗯,它对本地来源做同样的事情。所以,我不是在买那个解释。唯一的区别是来源。因此,必须延迟处理远程数据源。有人建议将远程数据源结果放入字符串中,然后将其用作源。我不应该这样做。如果这有效,它将证明jquery不会处理远程数据源。假设我的远程数据源没有导致滞后(事实并非如此),本地和远程之间应该没有区别。它最终是一系列数据。所以问题必须是处理和/或渲染远程数据源

我正在使用具有相同远程数据源的YUI,并且它立即在1个字符上呈现列表。所以,这证明它也不是数据源。我切换到jquery因为我发现整体更好。我将查询限制为250条记录。它不是即时的,而是在大约1秒后渲染。