我目前正在构建一个搜索外部数据库并显示与给定搜索字符串匹配的记录的网站。搜索是实时的,因此会在用户键入时显示结果。
现在我采用的第一个(也是当前)方法是页面实际连接到 mySQL 服务器并通过 AJAX 检索内容,用户在搜索框中键入的每个字母。
现在我开始研究 JSON 对象(我最近才开始构建网站),并且想知道在开始时将整个数据库加载到 JSON 对象中,然后在搜索时查看它是否是个好主意。
这是一个好主意吗?会更快吗?提前致谢
我目前正在构建一个搜索外部数据库并显示与给定搜索字符串匹配的记录的网站。搜索是实时的,因此会在用户键入时显示结果。
现在我采用的第一个(也是当前)方法是页面实际连接到 mySQL 服务器并通过 AJAX 检索内容,用户在搜索框中键入的每个字母。
现在我开始研究 JSON 对象(我最近才开始构建网站),并且想知道在开始时将整个数据库加载到 JSON 对象中,然后在搜索时查看它是否是个好主意。
这是一个好主意吗?会更快吗?提前致谢
这完全取决于数据的大小和查询的复杂性。如果你可以合理地提前将数据发送到客户端,然后在本地搜索,那当然很有用,因为它都是本地的,而且你没有查询服务器的延迟。但是如果你有大量的数据,或者查询很复杂,那么在服务器上进行查询可能更有意义。
没有万能的解决方案,它取决于数据。
...并通过 AJAX 检索内容,用户在搜索框中键入的每个字母。
这通常是矫枉过正。通常,您希望等到用户输入暂停后再触发 ajax 调用,这样如果他们快速连续输入“james”,您搜索“james”而不是搜索“j”,然后搜索“ja ",然后是 "jam",然后是 "jame",然后是 "james"。
例如,假设您的搜索触发器是一个keypress
事件。这将是一种相当常见的方法:
var keypressTimer = 0;
function handleKeypress() {
if (keypressTimer) {
cancelTimeout(keypressTimer);
}
keypressTimer = setTimeout(doSearch, 100); // 100ms = 1/10th of a second
}
function doSearch() {
var searchValue;
keypressTimer = 0;
searchValue = /*...get the search value...*/;
doAjaxCallUsing(searchValue);
}
这被称为“去抖”输入(来自硬件工程,与按下按键时的机械和电气“弹跳”有关)。