AngularJS によって提示されるかなり大きなデータセットがあります。読み込みに数秒かかりました。インスタント検索は少し遅くなります。しかししばらくすると、Chrome はスクリプトがメモリを使いすぎていると文句を言い、続行するかどうか尋ねてきました。
だから私はプロセスを調べます.ng-repeatには複雑なフィルターがあり、複数の入力に対するフィルタリング、ソート、ページネーション、制限などがあります.
<tr ng-repeat="rec in records | my filter : [model1, model2, model3] | sort: model4 | start: model5 | limit: model6">
私が行ったことから、元のデータセットの新しいオブジェクトを作成する $.map() または $.grep() を使用するなど、各フィルターの入力から新しいデータセットを作成する必要があります。私の質問は、最後のフィルターが終了するまで常にアップする必要があり、ビューがレンダリングされるということです。次に、すべての中間データセットのクローンがガベージ コレクションされますが、これを処理するのは角度がありますか? またはどのように明示的にそれらを gc することができますか?
または、Angular でそれを行うためのベスト プラクティスは何ですか?
PS。ng フィルターの動作例を次に示します。
msApp.filter('startFrom', function() {
return function(input, start) {
if (!input) return [];
return input.slice(+start); // +start, parse to int
};
});
したがって、モデルが変更されるたびに、このフィルターが実行され、新しいリストが作成されます。そして、私はそれらのいくつかをチェーンにしています。