插入/更新记录时的流星性能

时间:2013-09-04 20:42:37

标签: meteor

我有以下模板:

<template name="datatable">
  <table class="table table-hover">
    <thead>
      <tr>
        <th>Path</th>
        <th>Average</th>
      </tr>
    </thead>
    <tbody>
      {{#each entries}}
        <tr>
          <td>{{path}}</td>
          <td>{{avg}}</td>
        </tr>
      {{/each}}
    </tbody>
  </table>
</template>

条目填充为:

Template.datatable.entries = ->
  Metrics.find( { metric: 'mean' }, { fields: { path: 1, avg: 1 }, sort: { avg: -1 }, limit: 10 })

两个问题:

1)当我刷新页面时,我可以看到表格行快速变化,直到它显示10的排序列表。就像客户端正在接收所有数据并显示和排序它一样。我想我会得到的是客户端只从服务器接收10行。

2)当服务器更新集合时,客户端会冻结,直到服务器完成更新。

我如何解决这两个问题?

1 个答案:

答案 0 :(得分:2)

  1. 你是部分正确的。客户端正在处理来自服务器的数据。但是,当您拨打find但是调用subscribe时,则不会发生这种情况。刷新页面时,将创建与服务器的新连接以及新订阅。您可以使用订阅的ready()等待初始数据到达。见docs。如果您不想自己处理订阅状态,IronRouter有一种等待数据到达的内置方式(如果使用路由器不是一种过度杀伤)

  2. 听起来很奇怪。在服务器将数据发送到客户端之前,客户端无法告知服务器正在更新。当发生这种情况时,您应该体验#1中的行为。我猜你要么向客户端发送太多数据需要时间来排序,要么你正在更新大块的数据。更多细节或实例可能有所帮助。