当前位置: 首页 > 知识库问答 >
问题:

Laravel jQuery自动完成速度

萧宣
2023-03-14

我正在使用Laravel。自动完成速度很慢。我知道这可能是因为我的数据库有很多信息。我在表中总共有38432行。但是我确信脸书、推特等比我拥有更多。

如何加快自动完成的速度?

这是我的代码:

class AutoCompleteController extends Controller {

  public function index() {
    return view('layouts.mess');
  }

  public function aa(Request $request){
    $term = $request->get('term');

    //$queries=Profile::distinct('cityandstate','LIKE','%'.$term.'%')->take(5)->get();
    $queries = all::where('cityandstate', 'like',  $term . '%')->offset(5)->limit(15)->orderBy('cityandstate','dec')->get();

    foreach ($queries as $query) {
      $results[] = ['value' => $query->cityandstate ];
    }       

    return response()->json($results);
  }
}

JavaScript:

<script type="text/javascript">
    $( function() {
      $( "#location-input" ).autocomplete({
        //html : html,
        source: "display-searches",
        minLength: 1,
        select:function(e,ui) { 
          $("#location-input").val(ui.item.label);
        }
      });
    });




</script>

共有1个答案

唐炜
2023-03-14

“慢”是一个相对术语。我建议测量你选择的语句速度,让读者知道你的意思,也许也知道你在寻找什么样的速度改进。在PHP中,您可以使用microtime(true)来获得时间的浮点表示。

您的硬件可能是第一个开始的地方。您是在开发机器上运行这个,还是在共享PHP主机上运行,还是在具有大量RAM的专用VPS上运行?这东西很重要。如果问题出现在live中,那么可能您的数据库服务器没有达到要求。

已向您推荐索引。它们是一种数据库功能,以牺牲插入速度为代价,使数据搜索速度更快,而且它们通常是一个好主意。但是,在MySQL上,索引不用于像%x%这样的查询-前面的通配符表示不能使用它们。“完整表扫描”是必需的,当您没有索引时会发生这种情况(这就是为什么您发现它们没有区别)。

如果确实无法升级数据库服务器,则可以创建一个新表,该表连接到将所有单词拆分的表,因此只能在一侧进行匹配。

例如,考虑这个地址部分:

Greenwich, London

根据您的查询,我假设您希望在用户开始键入以下任一项时自动完成匹配:

Gre
Lon

但是,如果您没有与以下内容匹配,这并不可怕:

wich
don

因此,从您的表中,连接到另一个名为words的表,以便上述条目在words表中获得两个相关条目:

Greenwich
London

您需要创建一个进程来保持words表与cities表同步。然后,您可以执行以下操作:

SELECT *
FROM address
INNER JOIN word ON (words.address_id = address.id)
WHERE word.word LIKE '?%'

然后,将替换为用户的当前单词,这可以在JavaScript中完成(按空格拆分)。这样做的好处是你找到了一个匹配项,你可以根据自己的喜好推荐这个词或整个地址短语。好消息是MySQL可以再次使用索引,因为您避免了左侧的百分比!

若要查看索引是否有任何不同,请尝试使用EXPLAIN语法将查询输入数据库客户端。例如,尝试上面的查询:

EXPLAIN
SELECT *
FROM address
INNER JOIN word ON (words.address_id = address.id)
WHERE word.word LIKE '?%'

您已经了解了如何使用创建索引(您可以直接在数据库客户机中运行,而不必在PHP中运行),还可以使用DROP INDEX。这些将帮助您在运行特定查询时发现差异(如果有的话)。

 类似资料:
  • 问题内容: 我正在尝试实现自动补全功能,但是找不到在Swift中可用的示例。下面,我打算转换Ray Wenderlich的自动完成教程 和2010年的示例代码。最后,代码进行了编译,但是没有显示包含可能完成的表格,而且我没有经验来了解为什么它未被隐藏shouldChangeCharactersInRange。 问题答案: 用下面的内容替换您的函数内容。希望对您有帮助。

  • 问题内容: 如何使用Redis实现自动完成功能? 比如说我有一个数组。当我型我得到 我希望你明白这一点。我如何有效地使用redis命令来实现这一点(如果可能,但我认为是)。如果我能通过telnet尝试一些简单的命令来模仿这种行为,那就太好了。 谢谢 问题答案: 如果您要处理的是大型数据集,建议您考虑将其实现。我将一小部分Ruby做到了这一点: 例如: 在Wikipedia的Tries条目上阅读有关

  • 自动完成是现代网站中经常使用的一种机制,用于向用户提供他/她在文本框中键入的单词开头的建议列表。 然后,用户可以从列表中选择一个项目,该项目将显示在输入字段中。 此功能可防止用户输入整个单词或一组单词。 JQueryUI提供了一个自动完成窗口小部件 - 一个与下拉列表非常相似的控件,但过滤选项只显示与用户在控件中键入的内容相匹配的选项。 jQueryUI提供了autocomplete()方法,用于

  • md-autocomplete是一个Angular Directive,用作一个特殊的输入控件,带有内置下拉列表,显示与自定义查询的所有可能匹配。 一旦用户键入输入区域,该控件就充当实时建议框。 《md-autocomplete》可用于从本地或远程数据源提供搜索结果。 执行查询时md-autocomplete缓存结果。 第一次调用后,它使用缓存的结果来消除不必要的服务器请求或查找逻辑,并且可以禁用

  • 描述 (Description) 自动填充是Framework7的移动友好和触摸优化组件,可以是下拉列表或独立方式。 您可以使用JavaScript方法创建和初始化自动完成实例 - myApp.autocomplete(parameters) 其中parameters是用于初始化自动完成实例的必需对象。 自动填充参数 下表列出了Framework7中可用的自动填充参数 - S.No 参数和描述

  • 我有两台机器,git bash auto complete的速度非常慢。当我点击tab键时,可能需要8到10秒才能完成文件名。只有当自动完成是git命令的一部分时,才会出现这种情况。自动完成工作正常。git命令的实际执行运行良好。 我正在使用 这是什么引起的?有什么可能的解决办法吗? 编辑:我更新到,问题仍然存在。我注意到在ConEmu中运行bashshell时,在长时间暂停期间底部显示的命令是。