0

我正在使用 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)

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

4

1 回答 1

1

钩子是反应性的data,所以它触发多次是完全正常的。

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

至于为什么会运行这么多次,我怀疑可能与buildPostSearch. 正如您在评论中指出的那样,buildPostSearch取决于会话变量,因此每次其中一个变量发生更改时,您的data钩子都会再次执行。

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

于 2015-07-22T17:53:36.877 回答