2013-10-15 28 views
7

有沒有辦法獲得您的模塊在任何時間點使用的綁定總數(通過模板{{ .. }}/ng-xxx="..."$scope.$watch(...)等)獲取您的應用程序/模塊中綁定的總數

+0

可能重複[如何計算一個網頁上的手錶的總數是多少?(http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches一頁) –

回答

8

你應該能夠使用document.getElementsByClassName("ng-binding").length得到一個大概的想法。正如here所解釋的,該類適用於具有{{ ... }}ng-bind綁定的元素,因此您可以使用綁定來獲取數字或元素。它會錯過任何沒有以這種方式定義的東西。

所有表達式綁定都應該使用$parse來解釋表達式,所以如果您對臨時度量感到滿意,您可以嘗試在角度源代碼中向此服務添加一些調試代碼。應該很容易看到綁定創建的時間,但很難看到它何時被銷燬。

看着目前的主人,它看起來像$parse將改變爲1.2.0,這可能會讓事情變得更容易在Chrome中。爲此,您應該可以使用Chrome開發人員工具創建堆快照(從「配置文件」選項卡),然後使用構造函數搜索所有對象。

您也可以使用這樣的事情

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 +)更新版本,您還可以使用

$rootScope.$countWatchers(); 

如果您在該頁面的ngMock模塊。請參閱文檔here

+0

這是一個非常棒的答案。它讓我一眼就發現了我之前沒有注意到的一些與我的網頁有關的明顯問題。 –

+0

我認爲從http://stackoverflow.com/questions/18499909/how-to-count-total-number-of-watches-on-a-page接受的答案也是相關的 –

相關問題