【问题标题】:Meteor Publish/Subscribe best practiceMeteor 发布/订阅最佳实践
【发布时间】:2015-12-03 09:51:52
【问题描述】:

尝试了解有关 Meteor 的一些最佳实践。

我想为每个用户显示一个产品列表。我可以想出两种方法来展示每个用户的产品。

  • 方法 1:仅发布此用户的产品,并在帮助程序中使用 find({}) 方法显示所有产品
  • 方法 2:为所有用户发布所有产品,并在 helper 中使用 find({'userid' : this.userId}) 过滤掉当前用户的产品。

我更喜欢方法 1,因为这意味着在服务器和客户端之间发送的数据要少得多,但我看到人们也经常使用方法 2。

方法 1 是最佳实践吗?

以下源代码仅供参考。

方法一:

//Templates
Template.products.onCreated(function() {
      var self = this;
      self.autorun(function() {
        self.subscribe('products');
      });
    });


Template.products.helpers({
  getProducts: function () {
    return Products.find({}, { sort: { lastname: -1 }});
  }
});
//Publication
Meteor.publish('products', function () {
   return Products.find({'userid' : this.userId});
});

方法二:

//Templates
Template.products.onCreated(function() {
      var self = this;
      self.autorun(function() {
        self.subscribe('products');
      });
    });


Template.products.helpers({
  getProducts: function () {
    return Products.find({'userid' : this.userId}, { sort: { lastname: -1 }});
  }
});


//Publication    
Meteor.publish('products', function () {
  return Products.find();
}); 

【问题讨论】:

  • “最佳实践”根据什么,谁?是为了表演吗?向客户端发送尽可能少的数据?避免多次订阅?如果它只是关于“一般最佳实践”,那么它是基于意见的,不适合 Stack Overflow。请edit您的问题成为话题。

标签: meteor


【解决方案1】:

一般来说,答案是两者都

方法一

在大多数情况下,您只想将必要的文件发送给客户,原因有两个:

  1. 安全性 - 您可能不希望任何用户打开控制台并查看其他用户的产品。
  2. 带宽/性能 - 您需要在服务器上传输和跟踪的文档越少,您的性能就越好。对此有一个警告,您最终会得到该发布者的 0 observer reuse,但这可能会被前面的几点所抵消。

方法2

强烈建议始终在您的模板助手中进行过滤。如果您的助手的意思是“仅显示当前用户的产品”,那么您绝对应该在对find 的调用中添加该选择器。原因与代码维护有关。

假设从现在起 6 个月后,您最终出于某种不相关的原因发布了其他产品文档。如果您没有上述选择器,您的模板可能会做错事并为其他用户显示产品。

【讨论】:

    【解决方案2】:

    有一些考虑因素会影响使用哪种方法。

    例如,如果产品列表被视为私人信息,则不应使用方法 2,因为每个用户的产品列表都会发送给每个客户。另一方面,拥有一个巨大的出版物(方法 2)可以简化您的代码。例如,您可以在启动时订阅一次(例如),而不必像使用方法 1 那样担心逐个路由或逐个模板地管理订阅。

    正如您已经确定的,另一个考虑因素是已发布产品集合的大小。一般来说,尽量限制发送到客户端的数据量,同时保持代码的可维护性。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 2013-10-27
      相关资源
      最近更新 更多