javascript - meteor 如何处理大量对较大文档的订阅?

标签 javascript meteor websocket

我目前正在为一个相当大的 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/

相关文章:

javascript - Meteor - 为什么 Web 应用程序永远显示加载,而 WebSockets 显示待处理

javascript - Jquery Internet Explorer 兼容性(切换和动画)

javascript - Meteor 和 MongoDB 地理空间 - 边界 - $within

javascript - 在 appFog 上运行 NodeJS 应用程序

json - 在启动时将 json 文件导入服务器代码中的集合

javascript - 在 Meteor 中使用 jQuery 插件

javascript - Node.js "ws"websocket 服务器在 ~30 秒后随机断开客户端,错误 1006

javascript - 将自定义参数传递给 ajax 请求并返回相同的响应

javascript - 如何测试函数是否使用 async 关键字调用

javascript - 循环访问远程数据