gpt4 book ai didi

javascript - 使用 Django 使用远程数据提高 Twitter 的 typeahead.js 性能

转载 作者:太空狗 更新时间:2023-10-30 03:03:20 25 4
gpt4 key购买 nike

我有一个大约有 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 View :

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 模型中的短字段也被索引。有没有办法提高我的 typeahead 的性能?

最佳答案

我认为这与 Django 没有直接关系,但我可能错了。对于这种情况,我可以提供一些通用建议:

(我的钱在下面的#4 或#5)。

1) 从您的机器到 Heroku 的平均“ping”是多少?如果它很远,那就有点额外的开销。不过不多。与您所指的 8-9 秒相比,肯定不多。请注意,https 的惩罚会更大。

2) 检查 remote 数据集中的 waitLimitFnrateLimitWait 的值。它们是默认值吗?

3) 问题很可能与数据库/数据集有关。首先要检查的是建立与数据库的连接需要多长时间(是否使用连接池?)。

4) 第二件事:运行查询需要多长时间。我敢打赌这一点或下一点。添加调试打印,或使用 NewRelic(即使是免费计划也可以)。查看生成的查询并确保它已编入索引。让您的数据库“解释”此类查询的执行计划并使其使用索引。

5) 第三件事:结果大吗?例如,如果您指定“J”作为查询,我想会有很多答案。只是获取它们并将它们流式传输到客户端将需要时间。在这种情况下:

5.1) 为您的数据集指定一个minLength。至少 3 个,如果不是 4 个。

5.2) 限制您的数据库查询返回的结果集。让它返回不超过 10,比方说。

6) 我不是 Django 专家,但请确保您在 Django 中使用模型的方式不会使其首先将整个表加载到内存中。只是说说。

HTH.

关于javascript - 使用 Django 使用远程数据提高 Twitter 的 typeahead.js 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19440067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com