「X を試したことはありますか?」というような回答を探すのではなく、確かな回答を備えた知識のある情報源が必要です。
グラフを埋めるために使用している観察可能な配列があります。監視可能な配列には、ローカル キャッシュ内の Breeze.js から取得された最大 10,000 の POJO を含めることができます。最初に外に出てサーバーからデータを取得し、次にローカル キャッシュに対して呼び出しを行うと、データはほぼ瞬時に返されます。
次の呼び出しでは、指数関数的に遅くなります。返されるオブジェクトは、それぞれのオブザーバブルではなく、オブザーバブルを含んでいるわけでもありません。POJO を選択して Breeze クエリを実行しているためです。問題は、私が戻って同じデータセットを取得し続けるにつれて、それらがますます遅くなり続けることです。どういうわけか、監視可能な配列でメモリリークを作成していると思うようになりました。
私からしてみれば -
<h1>There are <span data-bind="text: chartData().length"></span> chart items</h1>
私のビューモデルでは -
var chartData = ko.computed(function () {
var myArray = ko.observableArray();
var params = { xmin: xMin(), xmax: xMax() };
if (!initialized) { return myArray(); }
datacontext.getData(myArray, params.xmin, params.xmax false);
return myArray();
}).extend({ throttle: 2000 });
クエリが実行されている datacontext.js ファイル内 -
if (!forceRemote) {
var thisData = manager.executeQueryLocally(query);
myObservable([]);
var myArray = myObservable();
ko.utils.arrayPushAll(myArray, thisData);
return myObservable.valueHasMutated();
}
SO.com の別の質問の推奨事項に基づいて、arrayPushAll と値の変更を試みましたが、myObservable([]) を設定してから thisData に等しく設定するよりも速くないようです。
データセットが大きいため、再計算をできるだけ短くしたいと考えています。
xmin と xmax を params として設定している理由は、計算結果を 2 つのオブザーバブルに依存させるためです...