jQuery UI - 加速自动完成
Posted
技术标签:
【中文标题】jQuery UI - 加速自动完成【英文标题】:jQuery UI - speeding up Autocomplete 【发布时间】:2011-08-14 19:29:47 【问题描述】:我的自动完成功能运行良好,但我正在努力想办法让它更快。这是我的 html:
Country: <select name='country' id='country' onchange="renewAutocomplete();">
<option value='US'>USA</option>
<option value='UK'>United Kingdom</option>
</select><br/>
City: <input type='text' name='city' id='city' />
<script>
function renewAutocomplete()
$( "#city" ).autocomplete(
source: "searchCities/" + $('#country').val(),
minLength: 2
);
</script>
$term = $_GET['term'];
$sql = "SELECT city FROM cities WHERE country_code = '$country' AND city LIKE '$term%'";
当然,这意味着每次击键都有一个新的查询。添加一些缓存会有所帮助,但仍然没有我认为的那么快。
问题 1 我的第一个想法是在选择国家/地区时在一个数据库调用中获取所有城市。有没有办法将返回的国家所有城市的 JSON 分配给自动完成可以使用的变量?我的初始测试只会在您输入时弹出所有城市:
$.get("searchCities/" + $('#country').val(), function(data)
$( "#city" ).autocomplete(
source: data,
minLength: 2
);
);
PHP:
$sql = "SELECT city FROM cities WHERE country_code = '$country'";
问题 2 由于城市和国家/地区变化不大(通常),因此只有一个包含所有值的平面文件会更快吗?
或者有没有其他方法可以更快地自动完成?
谢谢。
【问题讨论】:
【参考方案1】:自动完成假定如果您返回它,它就是一个有效的答案。所以:没有。
是的,从平面文件中提取比每次击键都敲击数据库要快得多。但是,如果您在 db 前面放置一些缓存(memcache),它可能与平面文件一样快。
但实际上,因为您(可能)正在为您的术语搜索(相对)较小的集合,所以无论如何它都会非常快。
从缩放的角度来看,将它们保存在平面文件中或使用缓存。
附带说明:查看mysql_escape_string() 是否使用$country 和$term。否则,您可以向SQL Injection attacks 开放。
【讨论】:
谢谢。我确实尝试了一个基本的缓存,它确实提高了速度,但我想我希望有更多类似谷歌的速度(对于一个小网站来说可能是不切实际的)。至于转义输入,我所在的框架会自动执行此操作。为了简单起见,我只是在问题中使用未转义的字符串。再次感谢!以上是关于jQuery UI - 加速自动完成的主要内容,如果未能解决你的问题,请参考以下文章
如何实现类似于 jQuery UI 自动完成的 Dojo 自动完成?