【问题标题】:What is the differences between Session and Local (client-side only) Collection?会话和本地(仅限客户端)集合之间有什么区别?
【发布时间】:2015-02-08 20:45:32
【问题描述】:

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

我知道 Session 是一个临时的反应键值存储,仅限客户端,并在页面刷新时被清除。 本地集合似乎是一样的:反应式的临时客户端存储,在页面刷新时清理,具有更灵活的功能,如插入、更新和删除查询,如服务器端 Mongo 集合。

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

但是使用 Session 和/或 Local 集合的最佳和有效方式是什么? 简单来说,什么时候用Session而不用呢? 以及何时使用本地集合,何时不使用?

【问题讨论】:

    标签: session meteor client-side server-side


    【解决方案1】:

    我假设您所说的本地收藏是指:new Mongo.Collection(null)

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

    【讨论】:

      【解决方案2】:

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

      什么时候使用集合?

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

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

      何时使用会话?

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

      查看this 帖子,该帖子描述了为什么不应过度使用会话。

      【讨论】:

      • Meteor 会阻止您在客户端插入文档,除非您拥有 ID,而您不会拥有该 ID。
      【解决方案3】:

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

      简单的示例可能包括用户选择的过滤器或当前选择的索引中的项目。

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

      【讨论】:

      • 太好了,如果您需要更长的解释,请在标记为正确之前告诉我。 :)
      • 我现在更了解 Session 的目的以及它的用途。在 Discover Meteor 教程中,他使用 Local Collection 设置了一个不打算发送回服务器的错误集合,这就是为什么我很困惑,不明白它的真正目的。所以我想当我想将数据发送回服务器时,我必须使用方法(插入/更新)和自定义方法,对吗?
      • 是的,我想你明白了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      相关资源
      最近更新 更多