我目前正在为一个相当大的 meteor 应用程序设计一个数据库,我们正在讨论 Meteor 是否会使用更多订阅、小文档集合或更少订阅较大文档集合来执行得更好。
其中一些文档最终可能会变得非常大,例如用户收藏夹或偏好的列表,这些文档只能在特定 View 中对单个用户可见。
就数字而言,我们谈论的是 10 个订阅,其中至少有四个不会持续订阅,在特定 View 中仅返回一个较大的文档。
与 4 个订阅可能非常大的文档集合相比,(我意识到如果数据已经在客户端上,这些单独的 View 可能会呈现得更快)。
任何见解或经验数据都会非常有用。
谢谢。
最佳答案
这可能不是一个完整的答案。我目前正在自己解决这个问题。
我对较大的数据集有一些经验。我订阅了一个没有任何限制的集合:
Meteor.publish('collectionName', function () {
return collectionName.find();
});
我的集合包含 400 份文档,总大小约为 600KB(使用 mongodump
转储集合后)。系统中有大约 100 个用户(每天来自不同大陆的用户),我们确实遇到了一些性能问题:
- 当我加载显示 400 项的页面时,您可以看到正在填充的列表。
- 您对 400 份文件的处理方式也很重要。我的每个条目都是一个相当复杂的 DOM 节点,每个条目都执行多个助手。
生成 DOM 需要一些时间并导致客户端 CPU 达到峰值。还有很多数据被传输到客户端。
一些解决问题的思路:
- 使用分页(例如包
alethes:pages
)防止客户端进行大量计算。 - 对 ListView 使用单独的发布/订阅,仅包括显示列表项所需的字段,以减少每个文档的大小
- 仅发布/订阅当前用户可见的文档(例如检查登录状态、访问权限等)以减少文档数量。
- 缓存订阅:https://github.com/meteorhacks/subs-manager (还没试过)
关于javascript - meteor 如何处理大量对较大文档的订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30039493/