我知道这个问题可能会被关闭,但我在确定应该在jQuery,AJAX请求或基本框架设计中实现搜索功能的哪些部分时遇到了麻烦。
一般来说,我正在查看的三个任务是执行新的搜索查询,应用过滤器/排序和分页。目前所有这些功能都是由Django(我正在使用的框架)处理的,但我发现这种方法既缓慢又不灵活。我意识到有一部分我应该真正移动网站的javascript端,但我无法决定在哪里绘制区别,我想知道是否有一套Web标准来帮助指导我。
执行搜索查询:基本上我在这里所做的只是以几种形式收集值,然后将JSON对象POST到REST API,将结果作为JSON返回。
过滤/排序:我可以通过在稍微不同的端点对相同的REST api进行新的AJAX调用,或者根据JSON对象中的数据过滤旧的结果列表来进行过滤。为了排序,我目前有一个python模块,它以多种不同的方式对数据进行排序,但是这需要为每个不同的排序提供一个新的get请求,并且逻辑很简单,很容易转移到Javascript
分页:这里有一个相当标准的变化,即我可以通过进行另一个AJAX调用来实现分页,因为我正在使用的REST api让我定义了我想要返回的答案的确切界限,但是如果我想使用非标准排序它不会真正起作用。现在我正在使用Django的Pagination,但是我觉得如果我使用jQuery解决方案进行分页,它会更轻松。
我意识到回复将部分以意见为基础,但我真的在寻找具体原因,为什么我应该选择其中一些选项而不是其他选项,例如安全问题,性能或与Web标准的重大偏差。
答案 0 :(得分:2)
目前所有这些功能都是由Django(我正在使用的框架)处理的,但我发现这种方法既缓慢又不灵活。
你的意思是说你正在执行搜索Django的ORM吗?如果是这样,有两个原因可能会导致这种情况变慢。
Django的ORM是数据库的垫片。它与您使用的数据库具有相同的性能和灵活性限制,只需使用更好的API。如果您想要搜索性能和灵活性,请使用针对搜索优化的数据存储区,这会引导我...
你有没有看过Haystack?它提供了一个专为执行数据搜索而定制的API,并与针对搜索速度和灵活性进行了优化的后端集成(我最喜欢的是elasticsearch)。
如果您不想在堆栈中添加额外的技术,并且正在使用postgres,为什么不查看GIN和GIST索引进行全文搜索。您需要使用一些扩展来管理它,并且您必须学会分析您的查询,以便在您需要的地方添加额外的索引。
始终在服务器上执行此操作。除非您想将整个数据库的查询结果加载到浏览器中以进行过滤/排序,否则您必须在服务器上执行此操作,以便您可以提前清除丢弃不需要的数据。
Django的内置分页系统可能有点缺乏,但是Haystack提供了它自己的分页,并且总是易于使用且成熟django-paginator
JQuery是一种非常好的方式,可以让您的搜索页面更加灵活,但将所有内容移动到浏览器中并不是您问题的答案。使用服务器端的工具可以使您的API更快/更灵活,然后使用这种额外的灵活性使客户端更好。