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
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
což vrátí DOMHighResTimeStamp
. A DOMHighResTimeStamp
může být přesný až na 5 mikrosekund (µs). Páni!
window
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
a console
jsou také platné možnosti měření časů, pokud nepotřebujete časování s vysokým rozlišením. 👍🏻