0

我知道这个问题可能已经结束,但我真的很难决定应该在 jQuery、AJAX 请求或基本框架设计中实现搜索功能的哪些部分。

一般来说,我正在查看的三个任务是执行新的搜索查询、应用过滤器/排序和分页。目前所有这些功能都由 Django(这是我正在使用的框架)处理,但我发现这种方法既慢又不灵活。我意识到其中的某些部分我真的应该移动网站的 javascript 端,但我无法决定在哪里区分,我想知道是否有一套 Web 标准来帮助指导我。

执行搜索查询:基本上我在这里所做的只是以几种形式收集值,然后将 JSON 对象发布到 REST api,将结果以 JSON 形式返回。

过滤器/排序:我可以通过在稍微不同的端点对相同的 REST api 进行新的 AJAX 调用来进行过滤,或者通过基于 JSON 对象中的数据过滤旧的结果列表来进行过滤。对于排序,我目前有一个 python 模块,它以多种不同的方式对数据进行排序,但这需要对每个不同的排序都有一个新的 get 请求,而且逻辑很简单,很容易转移到 Javascript

分页:这里相当标准,有一个更改,即我可以通过进行另一个 AJAX 调用来实现分页,因为我正在使用的 REST api 让我可以定义我想要返回的答案的确切范围,但如果我想使用非标准排序它不会真正起作用。现在我正在使用 Django 的分页,它可以工作,但我觉得如果我使用 jQuery 解决方案进行分页,它在应用程序上会更轻松。

我意识到这些响应将部分基于意见,但我真的在寻找为什么我应该选择其中一些选项而不是其他选项的具体原因,例如安全问题、性能或与 Web 标准的显着偏差。

4

1 回答 1

2

关于 Django 缓慢

目前所有这些功能都由 Django(这是我正在使用的框架)处理,但我发现这种方法既慢又不灵活。

你的意思是你正在通过 Django 的 ORM 执行搜索?如果是这样,有两个原因可能会变慢。

  1. 您正在查询未编入索引的字段。
  2. 您正在尝试进行全文搜索(或使用 __icontains ),这在任何数据库中都很慢。

Django 的 ORM 是围绕数据库的垫片。它与您使用的数据库具有相同的性能和灵活性限制,只是使用了更好的 API。如果您想要搜索性能和灵活性,请使用针对搜索优化的数据存储,这使我...

执行搜索查询

你看过干草堆吗?它提供了一个定制的 API,用于对您的数据执行搜索,并与针对搜索速度和灵活性进行了优化的后端集成(我最喜欢的是elasticsearch)。

如果您不想在堆栈中添加额外的技术,并且正在使用 postgres,为什么不查看 GIN 和 GIST 索引以进行全文搜索。不过,您将需要使用一些扩展来管理它,并且您必须学习分析您的查询,以便在您需要的地方添加额外的索引。

过滤器/排序

始终在服务器上执行此操作。除非您想将整个数据库的查询结果加载到浏览器中以进行过滤/排序,否则您必须在服务器上执行此操作,这样您就可以尽早丢弃不需要的数据。

分页

Django 内置的分页系统可能有点欠缺,但 Haystack 提供了它自己的分页,而且总是有易于使用且成熟的 django-paginator

笔记

JQuery 是一种使您的搜索页面更加简洁的非常好的方法,但是将所有内容都移到浏览器中并不能解决您的问题。在服务器端使用您可以使用的工具使您的 API 更快/更灵活,然后使用这种额外的灵活性使客户端变得更好。

于 2013-07-30T14:29:30.560 回答