【发布时间】:2016-06-20 12:26:06
【问题描述】:
让我们以这个场景为例,在电子商务应用程序中,用户搜索“手表”。
我是否建议发布和订阅整个 Products 集合?因为那张桌子我长大了很多。我可以在不订阅的情况下从集合中获取吗?
另外,在 Meteor 1.3 中,哪个是定义集合的最佳位置?根据我的阅读,它必须在 /imports/api,但稍微了解一下可能会有所帮助。
谢谢,
【问题讨论】:
让我们以这个场景为例,在电子商务应用程序中,用户搜索“手表”。
我是否建议发布和订阅整个 Products 集合?因为那张桌子我长大了很多。我可以在不订阅的情况下从集合中获取吗?
另外,在 Meteor 1.3 中,哪个是定义集合的最佳位置?根据我的阅读,它必须在 /imports/api,但稍微了解一下可能会有所帮助。
谢谢,
【问题讨论】:
当您想将数据发送到您的流星客户端时,您有三个选项 - 选择您自己的冒险。
优点:易于实现,数据到达后在客户端上快速使用/过滤,发布可以在服务器上为所有客户端重用
缺点:不能很好地扩展/不能超过几千个文档,可能很多要传输给客户端
在什么时候使用:你有一个小规模的有界集合,客户端需要所有这些来过滤/搜索/选择
您可以让流星方法将过滤后的文档传递给客户端,而不是发布它们。 IE。用户搜索“手表”,该方法只提供那些文件。有关详细信息,请参阅this section of the guide。如果您愿意,您可以将文档放入本地集合中,但这不是必需的。
优点:性能、可扩展性、数据隔离(您不必担心文档的某些子集是由另一个订阅添加的)
缺点:与订阅相比,设置和管理工作量更大
在什么情况下使用:您有一个无限的集合,并且您需要以最高效的方式使用一个子集
这与 (2) 非常相似,只是您将在更改搜索参数后重新订阅 autorun。详情请见this section。
优点:比(2)更容易实现
缺点:计算量更大,但比 (2) 慢一点,可能例外是发布可以在服务器上重复使用(不太可能在搜索的情况下)
在什么情况下使用:你有一个无限的集合,你需要一个工作量/代码最少的子集
在不了解您的特定用例的情况下,我会选择 (2)。
至于在哪里定义您的集合,请参阅 this section 和 todos app 示例。建议使用您提到的imports/api。有关原因的解释,请参阅this question。如果您需要更多详细信息,我建议您打开一个单独的问题。
【讨论】:
一般来说,我们不会一次将所有获取的数据发布到页面上。就用户体验而言,这对客户来说太长了。一个常见的建议是分页加排序。
对于 Meteor,服务器上的集合与客户端上的集合不同。简而言之,客户端上的集合是服务器集合的子集。该子集中的数据由 Meteor 的发布订阅机制确定。数据在服务器上发布,您在客户端上订阅它。这样您就可以得出子集。此外,您可以定义过滤、排序、计数等,以根据您希望在客户端使用子集的内容和方式来塑造派生子集。该文档包含一个相当不错的指南和有关Meteor collections 的详细信息。
Meteor 中定义集合的地方非常灵活。它不必是/imports/api。它可以是服务器和客户端都可以访问的任何位置,因为在一般用例中,服务器需要查看数据并定义操作集合的方法,客户端也需要查看它以在其上呈现数据网页。但是,如前所述,它很灵活,取决于您如何实现和构建应用程序。它可以是服务器和客户端都可以访问的位置,但不必如此。在某些情况下,集合仅在服务器上定义,客户端从隐式和间接协议中获取数据。 Meteor 方法就是其中之一,Restful API 是另外一个例子。这是逐案的,你做你感觉最好的事情。这就是乐趣的来源。订阅很常见也很方便,但不是唯一的。
Meteor 分别为服务器和客户端的文件夹访问定义了特殊规则,Meteor 1.3 强加了一个新的调制规则。我喜欢阅读 Meteor 文档并发现它们非常有用,例如 this one 有助于加深对上述规则的了解。
【讨论】: