diff --git a/Chapter10/optimize-sync/benchmark.js b/Chapter10/optimize-sync/benchmark.js new file mode 100644 index 0000000..0d180d6 --- /dev/null +++ b/Chapter10/optimize-sync/benchmark.js @@ -0,0 +1,23 @@ +const benchmark = require("benchmark"); +const slow = require("./slow"); +const loop = require("./loop"); +const suite = new benchmark.Suite(); +const maxNumber = 100; // number to pass through to sumOfSquares() + +suite.add("slow", function () { + slow(maxNumber); +}); + +suite.add("loop", function () { + loop(maxNumber); +}); + +suite.on("complete", printResults); +suite.run(); + +function printResults() { + this.forEach((benchmark) => { + console.log(benchmark.toString()); + }); + console.log("Fastest implementation is", this.filter("fastest")[0].name); +} diff --git a/Chapter10/optimize-sync/loop.js b/Chapter10/optimize-sync/loop.js new file mode 100644 index 0000000..961cdeb --- /dev/null +++ b/Chapter10/optimize-sync/loop.js @@ -0,0 +1,10 @@ +function sumOfSquares(maxNumber) { + let i = 0; + let sum = 0; + for (i; i <= maxNumber; i++) { + sum += i ** 2; + } + return sum; +} + +module.exports = sumOfSquares; diff --git a/Chapter10/optimize-sync/package-lock.json b/Chapter10/optimize-sync/package-lock.json new file mode 100644 index 0000000..e28992a --- /dev/null +++ b/Chapter10/optimize-sync/package-lock.json @@ -0,0 +1,27 @@ +{ + "name": "optimize-sync", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", + "requires": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" + } + } +} diff --git a/Chapter10/optimize-sync/package.json b/Chapter10/optimize-sync/package.json new file mode 100644 index 0000000..0110ded --- /dev/null +++ b/Chapter10/optimize-sync/package.json @@ -0,0 +1,15 @@ +{ + "name": "optimize-sync", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "benchmark": "^2.1.4" + } +} diff --git a/Chapter10/optimize-sync/slow.js b/Chapter10/optimize-sync/slow.js new file mode 100644 index 0000000..4a1a298 --- /dev/null +++ b/Chapter10/optimize-sync/slow.js @@ -0,0 +1,13 @@ +function sumOfSquares(maxNumber) { + const array = Array.from(Array(maxNumber + 1).keys()); + + return array + .map((number) => { + return number ** 2; + }) + .reduce((accumulator, item) => { + return accumulator + item; + }); +} + +module.exports = sumOfSquares; \ No newline at end of file