加载缓慢的jQuery自动完成

Slow loading jQuery Autocomplete

提问人:Andrew G. Johnson 提问时间:4/10/2010 更新时间:11/30/2012 访问量:3326

问:

嗨,我正在使用 jQuery 的自动完成功能为我的公司构建一个内部应用程序,我发现它往往启动得很慢。我的假设是,瓶颈可能正在将其元素添加到 DOM 中,因为在第一次查询之后,它似乎要快得多。有谁知道在页面加载时预加载这些元素的方法,而不是在用户开始输入时第一次加载?

jQuery 自动完成

评论

0赞 Ivo Sabev 4/10/2010
您使用的是什么服务器端语言?
0赞 Andrew G. Johnson 4/10/2010
PHP但这不是问题,第一次尝试时总是很慢。例如,如果我输入第一个查询和下一个查询,随机结果的显示速度会快得多(我已经检查了 MySQL 查询,并且以 0.01 毫秒的速度返回)foobarrandom

答:

1赞 serg 4/10/2010 #1

如果你不必使用 ajax 调用来检索数据,并且你的自动完成列表不是太大,你可以从 js 对象数组中提供自动完成的数据。

假设你有这样的数据(你只要你愿意/可以尽早构建):

var data = [{"n":name, "p":pagename,"c":number_of_results},...];

然后自动完成调用将如下所示:

$("#autocomplete").autocomplete(data, {
    matchContains: true,
    formatItem: function(row, i, max) {
        return row.n + " ("+row.c+")";
    },
    formatMatch: function(row, i, max) {
        return row.n;
    },
    formatResult: function(row) {
        return row.n;
    }

});
$("#autocomplete").result(function(event, data, formatted) {
    if(!data) {
        alert("Please select an item");
    } else {
        window.location.href =  data.p;
    }
});

这将创建一个自动完成,如下所示,并在单击项目时重定向到相应的项目页面名称。item name (number of results)

我有大约 1,000 个项目,自动完成速度是即时的。

0赞 olegarch 8/17/2012 #2

PHP/SQL 上的服务器端速度很慢。

不要使用 PHP/SQL。我的自动完成是用 C++ 编写的,并使用哈希表进行查找。 在此处查看性能。

这是 Celeron-300 计算机,FreeBSD,Apache/FastCGI。

而且,你看,在巨大的词典上运行得很快。 10,000,000 条记录不是问题。

此外,还支持优先级、动态翻译和其他功能。