ali*_*s51 24 javascript database ajax typeahead.js
我有一个包含10,000个地址和5,000人的大型数据库.
我想让用户在数据库中搜索地址或用户.我想使用Twitter的预先输入结果,因为他们输入文本.
在这里查看NBA示例:http://twitter.github.io/typeahead.js/examples.
据我所知,从速度和负载的角度来看,预取15,000个项目并不是最佳选择.尝试实现这一目标的更好方法是什么?
Hie*_*yen 46
由于没有人做出任何回答,我会继续提出我的建议.
我觉得你的大数据库最适合使用remote有typeahead.js.快速举例:
$('#user-search').typeahead({
name: 'user-search',
remote: '/search.php?query=%QUERY' // you can change anything but %QUERY
});
Run Code Online (Sandbox Code Playgroud)
它的作用是当你输入字符时input#user-search它会将AJAX请求发送到search.php带有查询作为输入内容的页面.
在search.php您可以捕获此查询并在您的数据库中查找:
$query = $_GET['query'].'%'; // add % for LIKE query later
// do query
$stmt = $dbh->prepare('SELECT username FROM users WHERE username LIKE = :query');
$stmt->bindParam(':query', $query, PDO::PARAM_STR);
$stmt->execute();
// populate results
$results = array();
foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $row) {
$results[] = $row;
}
// and return to typeahead
return json_encode($results);
Run Code Online (Sandbox Code Playgroud)
当然,由于您的数据库非常大,您应该优化SQL查询以更快地查询,也可以缓存结果等.
在类型前端,要减少查询数据库的负载,您可以指定minLength或limit:
$('#user-search').typeahead({
name: 'user-search',
remote: '/search.php?query=%QUERY',
minLength: 3, // send AJAX request only after user type in at least 3 characters
limit: 10 // limit to show only 10 results
});
Run Code Online (Sandbox Code Playgroud)
所以你的数据库有多大并不重要,这种方法应该很好用.
这是PHP中的一个示例,但当然对于您拥有的后端应该是相同的.希望你能得到基本的想法.
| 归档时间: |
|
| 查看次数: |
33304 次 |
| 最近记录: |