2013-10-15 7 views
7

あなたのモジュールがいつでも使用しているバインディングの数(テンプレート '{{ .. }}/ng-xxx="..."$scope.$watch(...)などを介してフックされています)あなたのアプリケーション/モジュール内のバインディングの総数を取得する

+0

可能複製[ページ上の時計の合計数をカウントするには?](http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches -on-a-page) –

答えて

8

document.getElementsByClassName("ng-binding").lengthを使用して大まかなアイデアを得ることができます。説明したようにhere、このクラスは{{ ... }}またはng-bindバインディングの要素に適用されるので、バインディングを使用して番号または要素を取得できます。しかし、このように定義されていないものは欠けてしまうでしょう。

式の解釈には、式のバインドには$parseを使用する必要があります。一時的な数値データがあれば角度ソースコードでこのサービスにデバッグコードを追加してみてください。バインディングが作成されたときはそれを確認するのは簡単ですが、破棄されたときは見やすくする必要があります。

現在のマスターを見ると、$parseが1.2.0に変更され、Chromeで作業が楽になるようです。このためには、Chrome開発者ツールを使用してヒープスナップショット( 'プロフィール'タブから)を取得し、Parserコンストラクタを使用してすべてのオブジェクトを検索する必要があります。あなたも、この

var watchersPerScope = $('.ng-scope').map(function() { 
    var s = $(this).scope(); 
    if(s.$$destroyed) return 0; 
    return (s.$$watchers || 0) && s.$$watchers.length; 
}).get(); 
var totalWatchers = 0; 
for(var i=0; i<watchersPerScope.length; i++) 
    totalWatchers += watchersPerScope[i]; 
console.log(totalWatchers); 

のようなものを使用して、アプリ全体であなたが持っているウォッチャーの数を見ることができます

私は、これらのどれもが、あなたが求めているものに偉大な解決策ではない実現が、彼らは、少なくとも何かをしています。最後に、パフォーマンス上の理由からこれを行っている場合は、ChromeのBatarangのパフォーマンスセクションが非常に優れています。角度の新しいバージョン(1.3.2)では


ページでngMockモジュールが含まれている場合、あなたはまた、

$rootScope.$countWatchers(); 

を使用することができます。ドキュメントhereを参照してください。

+0

これはかなり素晴らしい答えです。それは私が前に気付かなかった私のウェブページでいくつかの目障りな問題を一目で見つけるのを助けました。 –

+0

私はhttp://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches-on-a-pageから受け入れられた答えも関連していると思います –

関連する問題