Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将逻辑放入javascript与主框架的一般准则_Javascript_Jquery_Django_Web Standards - Fatal编程技术网

将逻辑放入javascript与主框架的一般准则

将逻辑放入javascript与主框架的一般准则,javascript,jquery,django,web-standards,Javascript,Jquery,Django,Web Standards,我知道这个问题可能已经解决了,但我确实很难决定在jQuery、AJAX请求或基本框架设计中应该实现搜索功能的哪些部分 一般来说,我所看到的三个任务是执行新的搜索查询、应用过滤器/排序和分页。目前所有这些特性都由Django(我正在使用的框架)处理,但我发现这种方法既慢又不灵活。我意识到这其中有一部分我真的应该移动网站的javascript端,但我很难决定在哪里区分,我想知道是否有一套Web标准来帮助指导我 执行搜索查询:基本上我在这里所做的就是收集一些表单中的值,然后将一个JSON对象发布到RE

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

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

执行搜索查询:基本上我在这里所做的就是收集一些表单中的值,然后将一个JSON对象发布到RESTAPI,将结果作为JSON返回

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

分页:这里有一个改动,这是相当标准的,我可以通过进行另一个AJAX调用来实现分页,因为我使用的RESTAPI允许我定义要返回的答案的确切范围,尽管如果我想使用非标准排序,它实际上不起作用。现在我使用的是Django's,它很管用,但我觉得如果我使用jQuery解决方案来分页,应用程序会轻得多

我意识到这些回答部分是基于意见的,但我确实在寻找具体的原因,为什么我应该选择其中一些选项而不是其他选项,例如安全问题、性能或严重偏离Web标准。

关于Django的缓慢性 目前所有这些特性都由Django(我正在使用的框架)处理,但我发现这种方法既慢又不灵活

你是说你在通过Django的ORM执行搜索吗?如果是这样的话,有两个原因可以解释为什么这会很慢

  • 您正在查询未编入索引的字段
  • 您正在尝试进行全文搜索(或使用_icontains),这在任何数据库中都很慢
  • Django的ORM是数据库中的一个垫片。它与您正在使用的数据库具有相同的性能和灵活性限制,只是使用了更好的API。如果您想要搜索性能和灵活性,请使用为搜索而优化的数据存储,这将导致我

    执行搜索查询 你调查过了吗?它提供了一个为您的数据执行搜索而定制的API,并与后端集成,这些后端优化了搜索速度和灵活性(我最喜欢的是)

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

    筛选/分类 始终在服务器上执行此操作。除非您希望将整个数据库的查询结果加载到浏览器中以进行筛选/排序,否则您必须在服务器上执行此操作,在服务器上您可以明智地尽早丢弃不需要的数据

    标页码 Django的内置分页系统可能有点不足,但Haystack提供了自己的分页,而且总是易于使用和成熟的

    笔记
    JQuery确实是一种很好的方法,可以让你的搜索页面更加整洁,但是把所有东西都放到浏览器中并不能解决你的问题。在服务器端使用您可以使用的工具使您的API更快/更灵活,然后使用这种额外的灵活性使客户端变得更好。

    我认为没有任何web标准,只是常识而已。例如,Javascript中的搜索/过滤意味着所有数据都必须下载到客户端。如果是大的,那可能是不切实际的。@Barmar结果不够大,不可能是不切实际的(目前限制为100个结果),但是如果我根据搜索结果的数量选择不同的方法来显示搜索结果,我的代码似乎不是很透明。如果我有一个有限的搜索和一个无限的搜索,将有限的版本放在javascript中,让无限的版本都在服务器端工作,这有意义吗?从性能上看,这似乎更好,但我不认为我能理解这些代码。如果结果上限为100,这无关紧要,只要你改变排序或筛选,你就会将窗口更改为数据集,并将被迫从服务器加载新数据。已经在使用elasticsearch,否则,非常感谢您的建议!此外,我觉得过滤器/排序点适用于排序,但我认为从用户体验的角度来看,为过滤器加载任何新内容是没有意义的,我觉得只需遍历已经存在的结果并隐藏应该过滤掉的结果是有意义的。也已经在使用django paginator(如问题所述),但在我看来,仅仅为了查看已返回结果的不同部分而发送另一个请求似乎很愚蠢。此外,使用服务器端分页排除了添加任何可能在前端添加或删除条目的逻辑,这让我觉得这是一个糟糕的决定。假设您加载的结果达到了一个极限,即少量的w如果具有某个属性,则为该属性应用筛选器。如果未向服务器发出请求,则只有4或5个结果。如果向服务器发出请求,则可能有100个结果