1

我正在开发一个 Node.js & Express & Backbone & MongoDB 应用程序。我有一个通过 url 获取的项目列表。在该列表中,我想选择按价格对项目进行排序。我不知道这是进行这种排序的最佳方式,也许我必须将链接放在带有确定 URL 的选择中,例如 [URL]&sort=1 并像获取所有项目一样获取它,或者我可以不使用链接并以另一种优化方式从主干获取此集合?

感谢和问候

4

1 回答 1

2

我对此的看法如下。除非你必须,否则避免在服务器上进行排序,而是在客户端上进行。这种方式响应速度要快得多。如果您有 20 件商品,并且想要按名称(升序或降序)、库存数量(升序或降序)或价格(同样的事情)排序,最好在客户端上进行。

当你必须,当你有 1000 个项目时。您根本不会在调用中加载 1,000 个项目然后对它们进行排序。您可能一次检索大约 30-50 个,具体取决于每个项目的大小。所以你需要有办法告诉服务器,“给我以下 30 件物品”,或者更准确地说,“给我从 X 点开始的 30 件物品”。

有很多方法可以做到这一点,即使在 REST 中也是如此。通常,您最好通过查询参数传递起点和计数,就像您所做的那样。因此,如果您正在获取小部件,并且您的 API 是

GET /widget

那么您将有几个查询字段:(field您要排序的字段)、orderasc或之一des)、count(整数)和start(开始的点,记录 ID 或索引)。

这给出了以下内容:

GET /widget?field=name&count=30&start=100&order=asc  // get widgets sorted by field in ascending order, starting with the 100th widget and going for 30 widgets
GET /widget?field=price&count=20&start=225&order=desc // get widgets sorted by price from highest to lowest (descending order), starting with the 100th widget and going for 20 widgets

对此有多种变体,例如,您可能会使用and代替startand 。我见过叫。但想法是相同的:这四个字段为您提供了服务器检索一组定义的项目所需的所有信息。countstartendordersort

于 2013-08-06T17:58:21.477 回答