From 5403a76a7c09cfde18dbbdd10ceb1b6a7b4dd3da Mon Sep 17 00:00:00 2001 From: atomiks Date: Wed, 11 Apr 2018 23:39:49 +1000 Subject: [PATCH] Create hz.md --- snippets/hz.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 snippets/hz.md 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 +```