Django 自动完成功能,预填充更好?
我想把jqueryui-autocomplete和我的django项目结合起来。我的解决方案起点是这个链接。
我看到的解决方案大多使用了*__icontains
或*__startswith
这两种搜索方式,当然这些搜索可以缓存(可以参考这个链接)。我在想,如果提前在页面上用一个相对小的词汇列表(比如1万个词)填充数组,是否能减少数据库的访问次数,这样会不会是更好的解决办法。例如,可以通过django一次性输出这些词:
return [str(e.keyword) for e in CM_Dict.objects.all()]
然后把得到的列表用作非常基础的jquery-ui-autocomplete配置中的source:
。
有没有好的方法来测试这种情况的效果?有没有人用django和autocomplete在生产环境中?
编辑:我应该补充一下,这个自动补全功能只对登录用户开放,但数据并不敏感。
1 个回答
0
这听起来像是过早的优化。这样做能减少数据库的访问次数吗?也许可以,但你还是得先访问数据库来预先填充数据,所以你最初加载页面的时候可能会变慢。你可以把预填充的数据缓存起来,这样就能避免再次访问数据库,但你也可以在服务器端的视图中做到这一点。这样做似乎和现有的Django自动完成解决方案更搭。
我在实际项目中使用过几种自动完成的解决方案。我还是其中一个的作者:django-selectable。评估这种变化的效果需要知道每个查询的开销有多大,以及它们的使用频率。查看服务器日志来统计访问次数和加载时间是个不错的开始。总体来说,我会很惊讶如果你的自动完成ajax视图是你应用的瓶颈所在。