【问题标题】:JQuery UI Autocomplete is slowJQuery UI 自动完成很慢
【发布时间】:2017-08-02 08:34:06
【问题描述】:

这段代码工作正常,但问题是它很慢,我认为这是因为每次我输入一个字母时它都会连接到数据库。有没有办法让它更快?我必须假设 db 表并不总是相同的,所以我不能只将结果添加到 var 并完成它。提前谢谢你。

另外,如果您认为这个 api 不好,我可以接受替代方案。

HMTL:

<label for="hint">Meds: </label>
<input id="hint">

JQuery:

$(function () {
    $("#hint").autocomplete({
        source: 'getMedicineNames.php'
    });
});

PHP:

require 'connect.inc.php';
$mysql = mysqli_connect("$db_host", "$db_username", "$db_pass", "$db_name");
$name = isset($_GET['term']) ? $_GET['term'] : "";

if ($name!="") {
    $sql = "SELECT MedicineName FROM medicinetypes WHERE MedicineName LIKE '%$name%'";

    $res = mysqli_query($mysql, $sql);
    $res = mysqli_fetch_all($res, MYSQLI_ASSOC);

    foreach ($res as $row) {
        $data[] = $row['MedicineName'];
    }
    echo json_encode($data);
}

【问题讨论】:

  • 我只想说很明显,这段代码是不安全的,容易受到 sql 注入攻击。如果你从数据库中提取它会很慢,可悲的是没有办法解决这个问题。您可以做的一件事是从每个字母中提取一个项目,并至少让它快速开始,然后在您输入更多内容后进行更多搜索。
  • 有没有办法避免安全问题?有没有办法说,在页面加载时将整个数据库放在一个 var 中,并将其传递给 api 以执行搜索客户端?

标签: php jquery autocomplete


【解决方案1】:

您可以在 3 个领域进行调查:

缓存

您可以实现简单的缓存系统。

例如,将每个起始字母的所有结果缓存在 26 个不同的文件或其他文件中。为您的情况找到最佳的重新分区。你有很多 choices 使用这种方法

数据库优化

您的表有索引吗?如果不是,您想深入研究that

大多数数据库都为您的用例提供了一些示例代码。

搜索引擎

当您必须处理大型数据集时,您需要考虑使用搜索引擎系统(如ElasticSearch)。 它们通常具有用于自动完成的内置模块并且非常高效。

【讨论】:

  • 除此之外,您还有一个 jQuery UI 自动完成选项,可以在客户端启用非常基本的缓存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多