繁体   English   中英

Meteor Helpers 缓存游标

[英]Meteor Helpers caching Cursors

我有一个模板,其中包含一个选择,它使用户能够过滤显示在表上的集合中的某些对象。

我将选择的结果存储在 ReactiveVar 中。 然后我在查询帮助器中使用这个 ReactiveVar 将我的对象返回到模板。

模板代码

<select id="colorSelect">
    <option val="getRed">getRed</option>
    <option val="getBlack">getBlack</option>
</select>

<table>
     {{#each Objects}}
          /* create table */
    {{/each}}
</table>

这是JS

//onCreated initializing Template ReactiveVar for Object's Color
Template.Object.onCreated(function() {
    this.color = new ReactiveVar("");
});

//event for changing 'color' based on select option
Template.Object.events({
    'change #colorSelect'(e, template) {
         const target = e.target;
         const color = $(target).val();
         template.color.set(color);
   }
});

//Helper method to return Objects
Template.objects.helpers({
    Objects: function() {
        const color = Template.instance().color.get();
        return Objects.find({foo:bar, color:color}).fetch();
    }
});

这一切似乎都很好,我的表格会根据选择进行被动调整。 我的问题是关于效率以及框架是否知道缓存我已经获得的游标。 那么它会在每次用户更改选择时执行 DB.find() 吗?

是否更有效 1. 做一个初始查找 2. 然后过滤这个主要的原始数据(来自 fetch 调用的数组) 3. 最后返回到 UI 然而,这样做似乎完全失去了反应性的任何优势,并且会需要用JS重新排列表格。

或者...... Meteor 是否只知道缓存我已经得到的游标(它甚至会产生性能差异 - 看看它是从 MiniMongo 中获取的......其中 afaik 只是一个 JSON 对象)

这种将reactiveVar 与Helper 结合使用的模式是标准吗?

我会说你的代码非常可靠,这实际上是它如何完成的标准,所以不用担心那部分。

至于效率和缓存,需要注意的是,客户端已经在minimongo保存了服务器数据、订阅的本地副本,因此只要您:

  • 将这些数据保持在最低限度; 不要过度发布
  • 不要不断地重新订阅新数据从而破坏旧数据

你可以走了。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM