performance.now()
performance.now()
Section titled “performance.now()”Introduction
Section titled “Introduction”performance.now() returns a high-resolution timestamp (in milliseconds) with sub-millisecond precision — far more accurate than Date.now().
Basic Usage
Section titled “Basic Usage”const start = performance.now();
// Code to measurefor (let i = 0; i < 1000000; i++) { Math.sqrt(i);}
const end = performance.now();console.log(`Took ${end - start}ms`);Date.now() vs performance.now()
Section titled “Date.now() vs performance.now()”| Feature | Date.now() | performance.now() |
|---|---|---|
| Precision | Milliseconds | Microseconds (fractional ms) |
| Monotonic | No (can jump with system clock) | Yes (always increases) |
| Purpose | Calendar time | Code performance measurement |
// Date.now() can be affected by clock changesconst t1 = Date.now();await someAsyncOperation();const t2 = Date.now(); // Could be wrong if clock adjusted!
// performance.now() is monotonic — always reliableconst p1 = performance.now();await someAsyncOperation();const p2 = performance.now(); // Always accurateMeasuring Async Operations
Section titled “Measuring Async Operations”async function measureAsync() { const start = performance.now();
await fetch('/api/data'); await processData();
const duration = performance.now() - start; console.log(`Total async operation: ${duration.toFixed(2)}ms`);}Measuring Individual Operations
Section titled “Measuring Individual Operations”function measureOperation(fn, iterations = 1000) { const start = performance.now();
for (let i = 0; i < iterations; i++) { fn(); }
const total = performance.now() - start; const average = total / iterations; console.log(`Total: ${total.toFixed(2)}ms, Average: ${average.toFixed(4)}ms`);}
// UsagemeasureOperation(() => Math.sqrt(42));measureOperation(() => [1, 2, 3].map(n => n * 2), 10000);Summary
Section titled “Summary”- Sub-millisecond precision (fractional milliseconds)
- Monotonic clock — not affected by system time changes
- Ideal for measuring code performance
- Use with
Date.now()for timestamps; useperformance.now()for durations