Ember 0.9.8.1 で記述されたコードベースを継承しました。場合によっては、非常に遅くなることがあります。遅い理由を絞り込んでいます。私は次のことに気付きました。
データをロードするために ArrayController 内の関数が呼び出されます。データをロードするために、バックエンドから json を取得し (高速)、行ごとに (以前に定義された) Ember.Object を作成し (低速)、それを ArrayController の content[] にプッシュします。
例:
App.ExOb = Ember.Object.extend({
data1: null,
data2: null,
func1: function () { // statements }.property('data1').cacheable()
func2: function () { // statements }.property('data2').cacheable()
..etc..
})
App.lotsOfData = Ember.ArrayController.create({
content: [],
loaddata: function() {
var self=this;
get_data().forEach(function (row, index) {
var d = App.ExOb.create(row.data);
self.pushObject(d);
}
}
})
Ember.Object の作成とプッシュが遅い理由を理解しようとしています。私が気付いたのは、オブジェクトの作成時 (App.ExOb.create() の例では)、オブジェクトのすべてのプロパティ関数 (例では func1() および func2()) が呼び出されることです。
なぜこれが起こるのかを確認するために少しのemberコードを試しましたが、これをエミュレートできないようです. 計算されたプロパティが実行されているのを確認できるのは、そのプロパティの get() を実行したときだけです。
get() ofcourse :-) を実行する以外に、計算されたプロパティ関数が実行されたときに誰かが教えてくれますか (または私が見逃したドキュメントを教えてくれますか)?
編集: これまでのところ、計算されたプロパティを実行する次の理由が見つかりました: 1. プロパティを直接呼び出す/使用する 2. ブラウザに表示されるハンドルバー テンプレートでプロパティを使用する。