2016-07-31 10 views
1

ドキュメントは、通貨フィルタするためのもので、コントローラやサービスからのフィルタを呼び出す2つの方法、言及:私がいることがわかり、角度のソースコードを見ることで

$filter('currency') 

または

currencyFilter 

を最初にインジェクタに名前+接尾辞を付けて呼び出します。つまり、非常に頻繁に呼び出されるフィルタやフィルタを頻繁に使用すると、パフォーマンスに影響が出る可能性があります。 2つの方法で注入すると、フィルタ関数への参照があり、直接使用できます。一方、第1の方法では、フィルターを使用する必要があるたびにインジェクターが呼び出されます。

頻繁に呼び出されるウォッチャーに置くと言いますが、ここで可能なperfドレインを感じています。 これに関する入力はありますか? Jsperfはv2をリリースするまで下がっているようだが、おそらく誰かが既に答えを持っているのだろうか?

答えて

1

すべて$filterは、getting a service from injectorです。インジェクターのオーバーヘッドはごくわずかです。

この懸念は、予備的な最適化と考えることができます。アプリケーションには、パフォーマンスにとってより重要な部分があり、注意が必要です。

フィルタを多くのウォッチャに使用するか、またはダイジェストを毎秒何度もトリガすることができます。これは、フィルタの適用方法よりも明らかなボトルネックと最適化のポイントを提供します。

+0

確かに、調べるべき他のボトルネックがあります。もちろん、質問する前に角度のソースコードを見ました。これは単なる好奇心の問題で、私はいくつかのperf比較などを得ることを望んでいました – Sephy

+0

サービスインスタンス化後、 '$ injector.get'は[キャッシュオブジェクトのプロパティを読み込みます](https://github.com/angular/angular。 js/blob/v1.5.8/src/auto/injector.js#L812-L818)、これはあなたの懸念事項の中で最小限でなければなりません。 Btwでは、ローカルのjsperf [v1](https://github.com/mathiasbynens/jsperf.com)または[v2](https://github.com/jsperf/jsperf.com)のコピーを設定できます。 – estus

関連する問題