【问题标题】:How can I manage what data is synced to a Meteor client's cache?如何管理同步到 Meteor 客户端缓存的数据?
【发布时间】:2012-04-27 19:19:31
【问题描述】:

我修改了排行榜示例以使用两个集合:

Players = new Meteor.Collection("players");
Tasks = new Meteor.Collection("tasks");

Players 集合包含示例中定义的 6 个文档。

> db.players.count()
6

Tasks 集合有 48,000 个文档。

> db.tasks.count()
48000

一打开浏览器,Node 就跳到 100% CPU,客户端看不到任何任务记录。

Players.find().count()
6
Tasks.find().count()
0

我尝试定义查询条件,但这只适用于服务器,对客户端没有帮助。

Players.find({name:"Claude Shannon"}).count();
1
Tasks.find({tid:"t36254"}).count();
0

我猜要同步 48,000 个文档太多了。这导致 Node 与 100% CPU 挂钩,客户端抛出如下错误:http://i.imgur.com/zPcHO.png

如何防止同步所有内容并仅从集合中检索特定文档?

【问题讨论】:

  • 部分答案似乎是禁用自动发布功能。 Autopublish 使简单的示例“仅适用于”少量文档,但它不适用于更多数据。在项目目录中,使用“meteor remove autopublish”。然后编写自己的发布和订阅函数。

标签: meteor


【解决方案1】:

Meteor 的自动发布功能可将您所有的收藏发布到客户端,这非常令人印象深刻,并且可以让事情快速运行,但它有点像 Rails 脚手架功能 - 对于真正的应用程序不是很有用 - 它用于学习和原型设计。

默认情况下,Meteor 会自动将集合中的每个文档发布到每个连接的客户端。要关闭此行为,请移除软件包:

$meteor 删除自动发布

然后,学习使用手动发布和订阅功能,它为您提供所需的控制:http://docs.meteor.com/#publishandsubscribe

【讨论】:

  • 也删除不安全的:meteor remove insecure
  • @radtek:为了安全起见,我们删除 insecure 包至关重要,但应该注意,删除它根本不能回答最初的问题。
  • @Clawsy 我的评论是对当前答案的补充,而不是完整的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
相关资源
最近更新 更多