我有一个大约有 120 万个名字的数据库。当您键入某人的姓名时,我正在使用 Twitter 的 typeahead.js 远程获取自动完成建议。在我的本地环境中,在您停止输入后大约需要 1-2 秒才能显示结果(在您输入时自动完成不会出现),并且在 Heroku 上部署的应用程序上需要 2-5 秒以上(仅使用 1 dyno )。
我想知道它仅在您停止输入(并延迟几秒钟)后才显示建议的原因是否是因为我的代码没有经过优化?
页面上的脚本:
<script type="text/javascript">
$(document).ready(function() {
$("#navPersonSearch").typeahead({
name: 'people',
remote: 'name_autocomplete/?q=%QUERY'
})
.keydown(function(e) {
if (e.keyCode === 13) {
$("form").trigger('submit');
}
});
});
</script>
keydown 片段是因为没有它,我的表单在按 Enter 时由于某种原因无法提交。
我的 Django 视图:
def name_autocomplete(request):
query = request.GET.get('q','')
if(len(query) > 0):
results = Person.objects.filter(short__istartswith=query)
result_list = []
for item in results:
result_list.append(item.short)
else:
result_list = []
response_text = json.dumps(result_list, separators=(',',':'))
return HttpResponse(response_text, content_type="application/json")
我的 Person 模型中的 short 字段也被索引。有没有办法提高我的预输入性能?