2016-07-21 2 views
2

Мне нужно измерить продолжительность $ digest внутри моего приложения с угловым выражением (мониторинг производительности).

В идеале, я хотел бы занять время перед запуском $digest(), а другой - сразу после его выполнения.

Я планировал завершить $digest функцию с моим кодом, что-то вроде этого (псевдо-код):

function $digest(){ 

    1. take timestamp 
    2. call to original $digest() 
    3. take timestamp 
} 

Эта упаковка должна быть прозрачной для остальной части приложения, так что все просто держать вызов $scope.$digest() без каких-либо знаний об этом упаковка. Я хочу избежать любых изменений в angular.js

Вопрос: как я могу это сделать? [Использование углового 1.3]

ответ

0

Вам необходимо переопределить $ digest в прототипе rootScope.

angular.module('myModule', []).run(run); 

function run($rootScope) { 
    var scopeProto = Object.getPrototypeOf($rootScope); 
    var originalDigest = scopeProto.$digest; 
    scopeProto.$digest = function(){ 
     console.log("Hello from digest!"); 
     originalDigest.call(this); 
    } 
} 

Fiddle (открыть консоль, чтобы увидеть результат).

+0

Не знал о 'Object.getPrototypeOf()'. Большой патент, спасибо! – Illidan

Смежные вопросы