角度摘要计时器

时间:2014-06-16 14:30:49

标签: angularjs angularjs-scope angularjs-ng-repeat

我试图弄清楚摘要周期运行所需的时间,所以我写了这样的话:

mPulseApp.run(['$rootScope', function ($rootScope) {
    var d = new Date();
    var $digest = $rootScope.$digest;
    var $newDigest = function () {
        var time = d.getTime();
        $digest.apply(this, arguments);
        console.log('time:' + (d.getTime() - time));
    }
    $rootScope.$digest = $newDigest;
}]);

然而,这会运行时间始终相同,就好像$ digest.apply方法正在运行async一样。请注意,当我测试时,我会在一个非常繁重的页面上,并且应该注意一些时间。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这个:

mPulseApp.run(['$rootScope', function ($rootScope) {
    var $digest = $rootScope.$digest;
    var $newDigest = function () {
        var time1 = new Date().getTime();
        $digest.apply(this, arguments);
        var time2 = new Date().getTime();
        console.log('time:' + (time2 - time1));
    }
    $rootScope.$digest = $newDigest;
}]);

答案 1 :(得分:1)

存储日期/时间时

var d = new Date();

您已将d设置为等于执行该行的日期/时间。调用d.getTime()会返回该对象的时间组件,因此您可以保留该对象一小时,d.getTime()将返回相同的结果。您可以在浏览器的控制台中测试此行为。

如果您正在使用Chrome,请尝试使用performance.now()方法获取可用于计算性能的高精度时间戳。例如:

PulseApp.run(['$rootScope', function ($rootScope) {

    var $digest = $rootScope.$digest;
    var $newDigest = function () {
        var d = performance.now();
        $digest.apply(this, arguments);
        console.log('time:' + (performance.now() - d) + ' ms');
    }
    $rootScope.$digest = $newDigest;
}]);

减去两个performance.now()调用会以毫秒为单位给出执行时间。有关performance.now()

的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Performance.now()