我正在使用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)
我担心表现。它是否多次查询数据库?有没有更好的方法呢?
答案 0 :(得分:1)
data
挂钩是反应性的,因此触发multiple times是完全正常的。
重要的是要记住,当它运行时,它从您的本地minimongo缓存中获取文档,而不是从实际数据库中获取文档。这些find
操作中的每一个实际上都花费了很少的时间,因此性能不是问题。
至于为什么它运行了这么多次,我怀疑这可能与buildPostSearch
的性质有关。正如您在评论中指出的那样,buildPostSearch
取决于会话变量,因此每当其中一个更改时,您的data
挂钩将再次执行。
附加说明:我认为您的示例代码中的data: ->
而不是data ->
。