Přesnější měření doby provádění v prohlížeči a Node.js

Je důležité měřit, jak dlouho věci v aplikacích trvají. Ve světě frontendu máme rozhraní Navigation Timing API, Resource Timing API a User Timing API ke shromažďování přesných metrik.

Navíc jsem zjistil, že používám Date objekt hodnotit, jak dlouho něco velmi často trvá.

const before = Date.now();
console.log(before);
// 1505722233092

//
// some code here
//

console.log(Date.now() - before); 
// 81736 -> time passed in ms

Pomocí Date.now funkce Jsem schopen získat trvání v milisekundách. Vrací časové razítko UNIX.

Ale co kdybych mohl být trochu přesnější?

Přesnější časová razítka v prohlížeči

Ve světě prohlížeče bych také mohl použít window.performance.now což vrátí DOMHighResTimeStamp . A DOMHighResTimeStamp může být přesný až na 5 mikrosekund (µs). Páni!

window.performance.now lze také použít např. pracovníci webu nebo služeb. V kontextu okna je vrácená hodnota čas, který uplynul od navigationStart .

const before = window.performance.now();
console.log(before);
// 1381822.74

//
// some code here
//

console.log(window.performance.now() - before);
// 7335.410000000149 -> time passed in precise ms

Ale co Node.js?

Přesnější časová razítka v Node.js

Dnes jsem se dozvěděl, že v Node.js existuje také funkce, která se nazývá hrtime získat časování s vysokým rozlišením. Dokumenty Node.js popisují funkci docela pěkně a zahrnují dobrou ukázku kódu.

const NS_PER_SEC = 1e9;
const time = process.hrtime();
// [ 1800216, 25 ]

setTimeout(() => {
  const diff = process.hrtime(time);
  // [ 1, 552 ]

  console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`);
  // benchmark took 1000000552 nanoseconds
}, 1000);

hrtime vrátí pole obsahující sekundy a nanosekundy na libovolný čas v minulosti. Počkat co?

Ano, celý účel hrtime je shromažďovat informace o intervalech nebo trváních. Proto ve skutečnosti nezáleží na tom, jaký byl časový okamžik.

Skvělé na této funkci je, že přijímá výsledek jiného hrtime volání času jako volitelný argument. Tímto způsobem nemusím sám počítat rozdíl a to se opravdu hodí!

Co nejpřesnější měření

S těmito dvěma funkcemi jsem schopen získat velmi přesné informace o tom, jak dlouho něco trvá v JavaScriptu, a to může být užitečné pro srovnávání doby provádění.

A je to, šťastné měření. 📏

Upraveno: Manuel Ernst také napsal malý obal kolem hrtime který stojí za to se podívat.

Upraveno: Marcin v komentářích poukázal na to, že console.time a console.timeEnd jsou také platné možnosti měření časů, pokud nepotřebujete časování s vysokým rozlišením. 👍🏻


No