1

我已经实现了 jQuery UI 自动完成功能并且遇到了明显的性能问题。

最初,我让它对输入的每个字符发送一个新查询(但必须输入至少 3 个)。

我的数据库已编入索引,有 50k 行数据(5 列)。我在数据库级别没有性能问题。

我决定尝试的一种技术是缓存 JSON 并将自动完成指向它而不是数据库。这很完美......最多2000行左右。除此之外,它变得缓慢而不稳定。

如果有人对技术有建议,我将不胜感激。

这里有一些代码可以让您了解 Javascript。

// First, setup some data to iterate over. 
// My thought is to query the DB once, and build this list in memory to avoid autocomplete hitting the database each keystroke.        

var data = []; 
    data.push({value: "Person 1", label: "Person 1"});
    data.push({value: "Person 2", label: "Person 2"});

$("#searchBox").autocomplete({
    source: data;
    minChars: 3;
    delay: 0;
});
4

2 回答 2

2

50k 行!!!!网络几乎肯定是你的瓶颈。使用 TOP 或 LIMIT(不知道您使用的是什么数据库)当然,用户永远不会扫描 50,000 个结果,只是在他们继续输入时带回前 10 个结果。

编辑

啊,我误读了您的问题,该表有 50k 行,而不是您要返回 50k 行 Doh!但是你确实提到了缓存 2k 行,所以......只需使用 TOP 限制结果并逐步提高直到它变得太慢,找到适合的折衷方案

于 2012-09-14T21:38:32.277 回答
0

我不使用服务器端的任何数据库,所有索引都存储在平面文件中,并且只向客户端发送“应答窗口”。

您可以使用我的解决方案,在此处获取源代码:http: //enumer.org/ac-dist.tgz

这工作非常快,可以处理巨大的字典:10M+ 记录OK。

在 Apache WEB 服务器下工作,在类 Unix 操作系统上使用 FastCGI 模块。我的演示在旧机器上运行:Celeron-300 DeskPro,这个硬件足以让你以你看到的速度快速工作。

服务器部分用 C++ 编写,客户端:JavaScript+Ajax。

源代码可根据要求免费提供。

于 2013-06-30T18:26:49.213 回答