设置window.performance标记的自定义时间

时间:2017-02-10 01:45:33

标签: javascript

我有一个场景,我希望能够在window.performance API.

中设置带有自定义时间的标记

某些事件发生在时间X,但直到稍后才知道该事件的名称。

我希望能够做到这样的事情:

function markAwait() {
    var deferred = $q.defer();
    var timeStamp = $window.performance.now();
    deferred.promise.then(function(markName) {
        $window.performance.mark(markName, timeStamp);
    });
    return deferred;
}

var deferredMark = markAwait();

// Do some things which take time

deferredMark.resolve('myMarkName');

不幸的是,你不能以这种方式调用performance.mark()。我的下一个想法是尝试创建一个Mark对象并直接将其写入性能标记数组。我对这种方法没有任何好运。

有没有办法完成我正在寻找的东西?

1 个答案:

答案 0 :(得分:0)

首先设置mark,然后使用.getEntriesByType()作为参数迭代"mark",检查name是否等于传递给resolve()调用的名称,然后减去来自window.performance.now()

mark.startTime
function markAwait() {
  var deferred = $q.defer();
  $window.performance.mark("defer");
  deferred.promise.then(function(markName) {
    var entries = $window.performance.getEntriesByType("mark");
    for (var entry of entries) {
      if (entry.name === markName) {
        console.log(window.performance.now() - entry.startTime)
      }
    }
  });
  return deferred;
}

var deferredMark = markAwait();

// Do some things which take time

  deferredMark.resolve("defer");



function markAwait() {
  var deferred = $.Deferred();
  window.performance.mark("defer");
  deferred.promise().then(function(markName) {
    var entries = window.performance.getEntriesByType("mark");
    for (let entry of entries) {
      if (entry.name === markName) {
        console.log(window.performance.now() - entry.startTime)
      }
    }
  });
  return deferred;
}

var deferredMark = markAwait();

// Do some things which take time
deferredMark.resolve("defer");

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;