首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone.relational,实时处理大数据

Backbone.relational,实时处理大数据
EN

Stack Overflow用户
提问于 2012-10-28 10:45:48
回答 1查看 727关注 0票数 0

我正在使用Backbone.js、node.js和socket.io构建一个实时提要应用程序。

我的FeedUpdate模型的集合。显示这些、覆盖Backbone.sync以便与socket.io集成可以很好地工作。

复杂之处在于,每个Update都有一组与它相关的注释。当我在Update视图中显示每个Feed时,我想要显示相关注释的摘要(注释的数量和单个“poular”注释),还可以单击不同的视图来显示每个Update本身,并有一个带有更多数据的分页注释列表。

我使用backbone-relational来建模Update模型和Comment模型之间的关系,如下所示:

Feed (collection) -> Update (model) -(has many)-> Comment (model)

我一直在学习本backbone-relational教程,但它似乎假设我希望将所有相关数据同时存储在Feed视图中,但由于可能会有数千条注释实时更新,所以我不会这样做:

http://antoviaque.org/docs/tutorials/backbone-relational-tutorial/

我的问题是:

  1. 如何在不加载所有注释数据的情况下为Feed视图中的每个Feed导入注释摘要数据,以及如何维护在Feed视图中显示分页完整数据的能力?
  2. 我使用backbone.layoutmanager来呈现我的视图。我应该如何最好地打破我的观点来完成上面的工作?
EN

回答 1

Stack Overflow用户

发布于 2012-10-29 06:03:07

对于Q1:

  • 我假设您正在使用类似于ioSync的东西在Backbone.sync中使用socket.io,而不是REST,或者类似的解决方案。
  • 将元数据(如注释#)作为Update上的一个属性。如果Update对象本身很重,则可以使用ioBind和自定义服务器端socket.io事件更新计数,而不是每次发送整个对象。
  • topComment中包含一个属性Update作为一个额外的一对一关系。当最初从服务器加载Update时,在响应中包括topComment,但不包括其他注释。
  • 惰性-使用自定义socket.io事件加载其余的注释。您可能需要一个服务器端处理程序,它以参数updateIdstartIndexmaxComments为参数,从给定的索引开始,返回给定Update的注释列表。如果结果以JSON的形式发送到客户端,那么在客户机上这样做是很容易的: //假设modelUpdate的一个实例。socket.emit('get_comments_page',{ updateId: model.get('id'),startIndex: 1,maxComments: 10 },函数(err,data) { if (err) {警告(‘无法获取注释:',err);}startIndex{model.get(’消息‘).reset(数据)};
  • 在获取Update时,避免为所有注释发送ID,然后尝试使用fetchRelated来解决这些问题。我用艰苦的方法学到了这个:
  • 您还可以将注释集合直接存储在视图上,而不必将其关联为Update的关系。

对于Q2:

我没有使用layoutmanager的经验,因为我使用Backbone.Marionette来管理我的视图。木偶有一个异步扩展 (免责声明:我是一个共同维护者)。我鼓励您了解Marionette.async是如何进行延迟呈现的,等待数据从服务器到达。

其主要思想是使用jquery的延迟对象来解析从服务器返回的数据。用延迟扩展上面的示例:

代码语言:javascript
复制
var MyView = Backbone.View.extend({
  // ... normal stuff that views need ...
  initialize: function() {
    var deferred = $.Deferred();
    // Assume `model` is an instance of `Update`.
    var that = this;
    socket.emit('get_comments_page', {
      updateId: that.model.get('id'),
      startIndex: that.options.pageNumber,
      maxComments: 10
    }, function(err, data) {
      if (err) {
        alert('Unable to fetch comments: ', err);
      } else {
        that.model.get('messages').reset(data)
      }
      deferred.resolve();
    });
    this.promise = deferred.promise();
  },

  render: function() {
    var that = this;
    this.promise.done(function() {
      // Do your normal rendering code here, for instance:
      $(that.el).html(that.template(that.model.toJSON()));
    });
    return this;
  }
});

注意:上面的代码段没有按原样进行测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13108151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档