2016-04-13 6 views
4

無駄な計算を避ける方法が必要です。Meteor.js:ドット表記で無駄なリフレッシュ/計算/再レンダリングを避ける方法

Template.registerHelper('name', function() { 
    console.log("running"); 
    return Meteor.user().profile.name; 
}); 

<body><p>My name: {{name}}</p></body> 

HTMLで):反応性の関数で は、私はちょうど一つの特性を必要とし、反応物を持っていますが、このオブジェクトの変更の他の1つが、すべての機能が再計算されます

今、あなたの年齢を変更してみましょう:

Meteor.users.update({_id:Meteor.userId()},{$set:{"profile.age":20}}); 

あなたが見るものを推測(...二度目の)あなたのコンソールで

running    x2 

しかし、それは重要ですなぜ名前が

を変更していないので、それは一度だけ実行する必要がありますか?私のアプリケーションでは、私は複雑なcalculsを持っていて、ユーザーのオンライン/アイドル状態は簡単に変化しています。

答えて

1

使用されたリアクティブ関数の値が変わるたびに計算が再実行されます。あなたの場合、リアクティブ関数はMeteor.user()なので、そのメソッドの結果が変わるたびに、再実行がトリガーされます。

再実行を本当に必要な場所に制限するには、追跡する値とまったく同じ値を返すリアクティブ関数を使用(または作成)する必要があります。たとえば、

var prop = new ReactiveVar(); 

Template.template.onRendered(function() { 
    this.autorun(function() { 
    prop.set(Meteor.user().profile.name); 
    }); 
}); 

Template.template.helpers({ 
    hlpr: function() { 
    console.log("RERUN!!!"); 
    return prop.get(); 
    }, 
}); 
+0

いつも行うのはいいですか?私は簡単にそれを行うためのfonctionsを作成したので、私はそれをパッケージで公開する –

+0

自己回答には、あまりにもありがとう!私はテンプレートで反応性のオブジェクトの配列を使用することは本当に悪い考えであることを自分自身も学びました –

関連する問題