2014-08-30 53 views
0

我目前正在建设一个网站,它搜索外部数据库,并提出匹配给定搜索字符串的记录。搜索是实时的,所以结果会随着用户输入而提出。JSON vs多个连接

现在我采取的第一种(也是目前的)方法是页面实际连接到mySQL服务器并通过AJAX检索内容,用户在搜索框中键入每封信。

现在我开始看JSON对象(我只是最近开始建立网站),并想知道是否是一个好主意,在开始时将整个数据库加载到JSON对象中,然后查看在搜索时。

这是个好主意吗?它会更快吗?在此先感谢

+1

作为一种替代方法,您可以查看频繁和最近搜索的词的缓存。 – techuser 2014-08-30 21:31:52

回答

2

它完全取决于数据的大小和查询的复杂性。如果您可以合理地将数据发送到客户端,然后在本地进行搜索,那么确定这很有用,因为它都是本地的,而且您没有查询服务器的延迟。但是,如果您有大量数据,或者查询很复杂,那么在服务器上执行查询可能更有意义。

没有一种万能的解决方案,它依赖于数据。

...并通过AJAX检索内容,用户在搜索框中键入每封信。

这通常是矫枉过正。通常情况下,您希望等到用户打字前暂停一次,然后再发出ajax调用,这样,如果他们连续输入“james”,则搜索“james”而不搜索“j”,然后选择“ja “,然后是”果酱“,然后是”詹姆“,然后是”詹姆斯“。

例如,假设您的搜索触发器是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); 
} 

这就是所谓的“反跳”输入(从硬件工程,涉及机电,因为它是按一个键的“反弹”)。

+1

对不起,在我这一部分的错误措辞,我实际上确实实施了一个暂停,每个keyup实际上等待用户停止输入:)感谢在json vs ajax上的输入,我可能只是给它一个镜头,所以我可以学习更多关于json对象的信息。干杯! – 2014-08-30 21:30:59