流星 - 数据多次获取?

时间:2015-07-22 15:32:06

标签: meteor coffeescript iron-router meteor-collection2

我正在使用Meteor Admin项目存根(https://github.com/yogiben/meteor-admin)。

我在posts修改了我的数据 - main.coffee集合,以包含buildPostSearch函数中定义的一些自定义过滤:

Router.map ->

    //cut 

    @route "dashboard",
        path: "/dashboard"
        waitOn: ->
          [
            subs.subscribe 'posts'
          ]
        data: ->
            posts: Posts.find( buildPostSearch() ).fetch()

buildPostSearch = () ->
    console.log "Executed."
    { //filter object constructed depending on Session parameters }

这可以正常工作,但在页面刷新时会多次调用它。我可以在浏览器控制台中看到:

Executed.
Executed.
Executed.
Executed.
Executed.
Executed.
(...around 50 times)

我担心表现。它是否多次查询数据库?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

data挂钩是反应性的,因此触发multiple times是完全正常的。

重要的是要记住,当它运行时,它从您的本地minimongo缓存中获取文档,而不是从实际数据库中获取文档。这些find操作中的每一个实际上都花费了很少的时间,因此性能不是问题。

至于为什么它运行了这么多次,我怀疑这可能与buildPostSearch的性质有关。正如您在评论中指出的那样,buildPostSearch取决于会话变量,因此每当其中一个更改时,您的data挂钩将再次执行。

附加说明:我认为您的示例代码中的data: ->而不是data ->