【问题标题】:Meteor performance when loading db in client在客户端加载数据库时的流星性能
【发布时间】:2017-09-05 14:07:17
【问题描述】:

我有一个列出书籍的 Meteor 应用程序。单击一本书会显示其章节的列表,单击一个章节会显示其 cmets 的列表。现在我正在尝试弄清楚如何优化 Meteor 客户端的性能。

我主要关心的是我应该如何构建我的集合,以及是否有任何方法可以让服务器知道首先发送哪些数据。我是 NoSQL 的新手,但似乎正确的 Mongo 方法是让章节成为书的子文档,而 cmets 成为章节的子文档。

但是,我不希望客户端必须等到所有章节和 cmets 都加载到客户端数据库中才能显示书籍列表。我想我可以使用关系数据库配置,但我不确定我是否可以强制 Meteor 先发送书籍表,或者使用 Meteor 和关系数据库是否会给我带来任何其他问题。

另外,由于我只是传输文本,也许这不会有太大问题?任何建议表示赞赏!

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    有两个原则你应该牢记

    • 您不必每次都发布所有内容
    • 是客户订阅,这决定了订单

    为了发布没有章节的书籍列表,您可以使用这样的查询

    Meteor.publish( "booksList", function () {
       return Books.find( {}, {fields: {bookName: 1}} );
    } );
    

    这应该返回一个只有两个属性的集合:_id 和 bookName

    在第二次发布中,您可以发送整个内容,但一次只能发送一本书:

    Meteor.publish( "fullBook", function ( bookId ) {
       return Books.find( {_id: bookId} );
    } );
    

    在客户端上,您应该确保在使用结果之前等待发布发生。

    当然,这一切都未经测试。我提前为这些错误道歉。

    【讨论】:

    • 不知道你可以一次获得文件。那很好。我最终将书籍拆分为一个单独的集合,同时将 cmets 作为章节的子文档。使用子子文档给了我一些访问数据的麻烦,而没有很多难以阅读的查询和循环。
    【解决方案2】:

    你应该只发布必要的文件。否则你的应用程序会变慢reffer this link.

    【讨论】:

    • 每当您链接到您参与的博客文章、库或其他外部资源时,you must clearly indicate this
    • @NathanTuggy 谢谢你,我会考虑这个。实际上,我分享这个是为了了解如何进行发布。不是为了宣传我自己。谢谢你的建议
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多