我有一个场景,我希望能够在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对象并直接将其写入性能标记数组。我对这种方法没有任何好运。
有没有办法完成我正在寻找的东西?
答案 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;