流星:显示数据 - 慢客户端,快速服务器?

时间:2014-01-08 19:09:54

标签: meteor

编辑 - 已解决

我的流星应用程序约占我办公室的20人。基本上它是一个美化的待办事项清单。经理添加项目,然后为每个项目添加任务,然后将其分配给员工。员工会看到分配给他们的任务列表。

当经理发布新任务时,非常需要很长时间才会显示在他们自己的任务列表中,但会立即显示给其他人(雇主或其他经理)。< / p>

经理的项目模板类似于:

HTML文件:

<template name="project">
  <input type="button" class="create-task" value="New">
  {{#each tasks}}
    {{> task}}
  {{/each}}
</template>

app.js文件:

var createTask = function (projectID) {
  ### a bunch of code that I don't think is relevant to the problem
  ### tasks are fairly complicated but it shouldn't matter
  Tasks.insert({projectID: projectID})
}

if (Meteor.isClient) {
  Template.project.tasks = function () {
    return Tasks.find({projectID: this._id})
  };

  Template.project.events = {
    'click .create-task': function () {
      createTask(this._id)
    }
  }
}

当经理创建任务时,它会重新呈现整个任务列表,每个任务大约需要2秒。 (任务相当复杂,我需要简化它们,但这是另一个故事)。查看同一任务列表的其他员工(和其他经理)将在大约2秒钟内显示新任务。但是对于经理来说,重新渲染所有现有任务需要10-30秒,同时它会锁定网页。

我假设我想以某种方式在服务器端而不是客户端插入文档?有没有正确的方法呢?

编辑:(一些额外的信息 - 这有点简化,但我相信包含所有相关的部分)

有三个集合,它们基本上位于层次结构中 - 项目,任务和注释。

Projects contain {name, create_date}
Tasks contain {projectID, name, description, create_date}
Comments contain {projectID, taskID, author, text, create_date, status}

评论状态可以是“新”,“已完成”或“已批准”。

数据库不是很大,显示所有原始数据需要几秒钟。需要一段时间的是显示大量条件信息。根据评论是新的/已批准/已完成,它们会改变颜色和/或隐藏在视图之外。

经理查看项目列表,并在每个项目旁边查看与该项目相关的“新”,“已完成”和“已批准”评论的数量。这是由以下内容生成的:

Template.projectMenuItem.newCommentsLength = function () {
  return Comments.find({projectID: this._id, status="new"}).count()
}

任务也会显示在列表视图中,该视图显示新/已完成/已批准的评论的数量。

还有一些其他条件显示项。最终结果是显示一个任务,即使列表形式(不显示注释),最终每个任务模板渲染大约需要2秒。如果我删除条件显示项,它会立即渲染。

EDIT - 已解决:我在服务器代码中的“Meteor.methods”下移动了“createTask”函数,然后从客户端调用它。现在添加新任务需要2秒而不是20-30。我仍然不确定为什么创建文档客户端导致它重新呈现所有任务,但它似乎应该在服务器端运行。

0 个答案:

没有答案