Виктор Хомяков, Яндекс
Виктор Хомяков, Яндекс
Я профессионально занимаюсь анализом и улучшением производительности страницы поиска в Яндексе (Search Engine Result Page, он же SERP или просто серп).
console.timeStamp('Начало inline JS');
На одной шкале с DOMContentLoaded и load
console.time(label); /* код */ console.timeEnd(label);
performance.mark(markName); /* код */ performance.measure(label, markName);
console.timeEnd()
пишет результат в консоль — это может замедлить код:
консоль закрыта | консоль открыта | |
---|---|---|
console.timeStamp |
2.8 Mops/s 0.35 μs | 2.8 Mops/s 0.35 μs |
console.time..timeEnd |
40 Kops/s 25 μs | 150-200 ops/s 5-7 ms |
performance.*
пишет в performance entries — надо чистить,performance.clearMarks(markName);
performance.clearMeasures(label);
В инспекторе для Node.js нет вкладки Performance, есть только Profiler
console.profile();
// код
console.profileEnd();
// точка отсчёта - загрузка модуля
const initialOffset = process.hrtime(), events = [];
// время, прошедшее с момента initialOffset
let start = process.hrtime(initialOffset);
// код
let end = process.hrtime(initialOffset);
events.push(['имя метода', start, end]);
const events = [];
// точка отсчёта - начало навигации
let start = performance.now();
// код
let end = performance.now();
events.push(['имя метода', start, end]);
fs.writeFileSync(
`timeline-${Date.now()}.json`,
JSON.stringify(events)
);
const traceEvents = [];
traceEvents.push({
pid: 1, tid: 1, ph: 'X', name: 'имя метода',
ts: startMicroseconds, dur: durationMicroseconds,
args: { // любая детальная информация
name: 'имя метода',
ms: durationMicroseconds / 1000
}
});
fs.writeFileSync(
`trace-${Date.now()}.json`,
JSON.stringify({
traceEvents,
metaInfoCreated: new Date()
})
);
Другие варианты названия: browser://tracing, about:tracing