0

Meteor Admin プロジェクト スタブ ( https://github.com/yogiben/meteor-admin ) を使用しています。

関数で定義されたカスタム フィルタリングを含めるように、データ -postsコレクションを修正しました。main.coffeebuildPostSearch

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)

性能が気になります。DBに何度もクエリを実行しますか? それを行うより良い方法はありますか?

4

1 に答える 1

1

フックはリアクティブであるため、複数回発火するのdataはまったく正常です。

実行すると、実際のデータベースからではなく、ローカルの minimongo キャッシュからドキュメントが取得されることに注意してください。これらのfind操作のそれぞれに実際にかかる時間はごくわずかであるため、パフォーマンスは問題になりません。

何度も実行されている理由については、の性質と関係があるのではないかと思いますbuildPostSearch。コメントにあるようにbuildPostSearch、セッション変数に依存するため、それらのいずれかが変更されるたびに、dataフックが再度実行されます。

追記:サンプルコードでdata: ->はなく、意味があると思います。data ->

于 2015-07-22T17:53:36.877 に答える