約 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>
キーダウン スニペットは、それがないと、Enter キーを押したときに何らかの理由でフォームが送信されないためです。
私のジャンゴビュー:
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 フィールドもインデックス化されています。タイプアヘッドのパフォーマンスを向上させる方法はありますか?