会话和本地(仅限客户端)集合之间有什么区别?

时间:2014-12-10 15:25:14

标签: session meteor client-side server-side

在Meteor中,我对Session和Local Collection有点混淆。

我知道Session是一个临时的反应键值存储,仅限客户端,并在页面刷新时清除。 本地集合似乎是相同的:被动的,临时的客户端存储,在页面刷新时清理,具有更灵活的功能,如insert,update&删除服务器端Mongo集合之类的查询。

所以我想我可以在没有Session的Local Collection中管理所有内容,或者在没有Local Collection的Session中管理所有内容。

但是,使用Session和/或Local集合的最佳和最有效的方法是什么? 简单地说,何时使用Session而不使用它? 何时使用本地收藏而何时不使用?

3 个答案:

答案 0 :(得分:6)

当我读到你的问题时,我告诉自己这是一个非常简单的问题,但后来我在摸不着头脑。我试图找出一个你可以用会话或集合完成的例子。但我没有找到任何用例。所以让我们从开始汇总一些事情。基本上你已经自己回答了这个问题,因为它是小糖,使收藏变得特别。

何时使用集合?

基本上,集合是数据库工件。想象一下,你有一个客户端 - 服务器应用程序。所有数据都保存在服务器端存储中。现在,您可以使用本地集合为用户提供服务器集合的一小部分。因此,客户端集合是具有减少的数据量的数据库。优点是您可以使用查询访问集合。您可以在服务器和客户端上使用相同的查询。另外,集合总是包含多个相同类型的对象。有时您在客户端上为客户端生成数据。无需服务器交互。比你可以使用本地收藏。本地集合提供与没有服务器通信的普通集合相同的功能。如果您有多个具有相同结构的对象,则应使用此选项,如果您想使用查询运算符,则应使用此选项。

您还可以将数据保存在会话对象中。会话对象也可以包含多个对象。但是想要在一个用特殊id索引的objectarray中找到一个对象。比你需要迭代抛出整个数组才能找到这个对象。你必须编写额外的逻辑,可以像魔术一样处理。此外,集合返回游标。游标是一个反应对象,只有在所选数据发生变化时才会发生变化。这意味着如果你使用带有id的find。比此对象只是在此id的对象发生更改时才会重新呈现。随着会话,你不能。当会话发生变化时,您需要重新渲染所有依赖对象。

何时使用会话?

其他一切。会话通常只是包含一些配置逻辑的小对象。它基本上只是一个对象,而不是相同对象的多次出现。现在没有时间详细介绍,但如果它不适合收集用例,您可以使用会话。

查看this帖子,其中介绍了不应过度使用会话的原因。

答案 1 :(得分:4)

我认为本地收藏是指:new Mongo.Collection(null)

不同之处在于本地集合无法在热代码推送中存活。刷新会擦除Session,但热码推送不会,Meteor中的特殊代码会在热代码推送的情况下持久保存Session变量的值。

答案 2 :(得分:0)

只要存储不需要持久保存到数据库的临时值,就可以使用Session。

琐碎的例子可能包括用户选择的过滤器或当前选择的索引中的项目。

最小化(插入,更新,删除等)中的操作数据旨在发送回服务器并存储在数据库中。例如,这可能是更新用户个人资料信息等。