Knockout.jsを新しい3.4.0バージョンに広範囲に依存する複雑なWebアプリケーションを移行して、コンポーネントを実装できるようにして、ノックアウトドキュメント読み取ることで、新たなdeferUpdatesオプションの提供、:遅延更新を使用してノックアウト3.4.0 deferUpdatesと再評価数
は、計算された観測とバインディング は、その依存関係が安定しているだけで後に更新されることが保証されます。
驚くべきことに、以前のように従属オブザーバブルが以前よりも何度も再評価され、以前より多くのUI再描画が発生する状況があります。
これは古いKOバージョンで一つだけ再評価につながるobservableArraysのための古典的な最適化の一例であり、新しい3.4.0 なしdeferUpdatesでオン:設定することで、
今this.items = ko.observableArray();
this.addNewData = function() {
var items = ko.utils.arrayMap(Items, function(item) {
return new Item(item.name, item.priority);
});
//take advantage of push accepting variable arguments
self.items.push.apply(self.items, items);
};
this.addNewData();
:
this.items = ko.observableArray();
:
ko.options.deferUpdates = true;
は2つの再評価、observableArrayの作成に1つあります
と、データが提供されたときの2番目はaddNewData()を呼び出すことによって発生します。
フィドル:http://jsfiddle.net/kkrgjbsr/
は代わりに、ちょうどであることが起こる何をより詳細に説明するため、observableArray初期設定に従うこと、それは私のために良いだろうと、ただ一つだけ、単一の再評価を引き起こす:
this.items = ko.observableArray([
new Item(Items[0]),
new Item(Items[1]),
...and so on
]);
でした誰かが、絶対に必要とする私のアプリケーションの一部があり、同時にこれらの不要な再評価を避けるため、deferUpdatesのパフォーマンス改善をいかに保つかを親切に説明してください。
ところで、deferUpdatesをオンにすることによって再評価数が増加するアプリケーション全体を追跡する方法はありますか?事前にみんなが
ますのでご注意ください
ありがとう:
- 私はレート制限エクステンダーを使用しない、また、これは常に提供する場合、私はわからないよう、一定の期間を指定しますただ一つの再評価。
- 私はそれらの何百ものを持っているので、deferredUpdatesで個別に各単一観測可能を延長しないことを好むだろう、とのコードが
私が理解していない点は、作成中にthis.items = ko.observableArray();が定義されているので、どのように違いがあるのか分かりません。この問題を示す実行可能なコードのサンプルは、文脈上非常に役立ちます。 – Tomalak
こんにちはtomalak、私は問題を隔離するために数時間を費やしました。そして私は悲しいことに、それがどこにあるのかを知るために驚いていました。:-)しかし、私のフィドルを見れば、dependantComputedはコンポーネントのスイッチとして考えるべきです。 2回変更すると、2つのコンポーネントの再描画が行われます。私は今より明確になることを願っています。 THX – deblocker
*注釈*、[複数のアイテムを一度にプッシュする際のこの質問](http://stackoverflow.com/q/23606541/419956)も興味深いかもしれません。 – Jeroen