diff --git a/snippets/hz.md b/snippets/hz.md new file mode 100644 index 000000000..b05f18af6 --- /dev/null +++ b/snippets/hz.md @@ -0,0 +1,34 @@ +### hz + +Returns the number of times a function executed per second. +`hz` is the unit for `hertz`, the unit of frequency defined as one cycle per second. + +Use `window.performance.now()` before and after the iteration loop to get the difference in milliseconds +to calculate the time elapsed executing the function `iterations` times, +using math to calculate the number of iterations per second. +Omit the second argument, `iterations`, to use the default of 100 iterations. + +```js +const hz = (fn, iterations = 100) => { + const before = performance.now(); + for (let i = 0; i < iterations; i++) fn(); + return 1000 * iterations / (performance.now() - before); +}; +``` + +```js +// 10,000 element array +const numbers = Array(10000).fill().map((_, i) => i); + +// Test functions with the same goal: sum up the elements in the array +const sumReduce = () => numbers.reduce((acc, n) => acc + n, 0); +const sumForLoop = () => { + let sum = 0 + for (let i = 0; i < numbers.length; i++) sum += numbers[i] + return sum +}; + +// `sumForLoop` is nearly 10 times faster +Math.round(hz(sumReduce)); // 572 +Math.round(hz(sumForLoop)); // 4784 +```