From 0d15161c2402be7bcdb575bc425307d8c9fef32b Mon Sep 17 00:00:00 2001 From: Nathan Woltman Date: Fri, 5 Jun 2015 20:43:48 -0400 Subject: [PATCH] benchmark: Add some path benchmarks for #1778 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Path functions being benchmarked are: * format * isAbsolute * join * normalize * relative * resolve PR-URL: https://github.com/nodejs/io.js/pull/1778 Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Roman Reiss --- benchmark/path/format.js | 31 +++++++++++++++++++++++++++++++ benchmark/path/isAbsolute.js | 27 +++++++++++++++++++++++++++ benchmark/path/join.js | 18 ++++++++++++++++++ benchmark/path/normalize.js | 18 ++++++++++++++++++ benchmark/path/relative.js | 26 ++++++++++++++++++++++++++ benchmark/path/resolve.js | 18 ++++++++++++++++++ 6 files changed, 138 insertions(+) create mode 100644 benchmark/path/format.js create mode 100644 benchmark/path/isAbsolute.js create mode 100644 benchmark/path/join.js create mode 100644 benchmark/path/normalize.js create mode 100644 benchmark/path/relative.js create mode 100644 benchmark/path/resolve.js diff --git a/benchmark/path/format.js b/benchmark/path/format.js new file mode 100644 index 0000000000..02fb691fe7 --- /dev/null +++ b/benchmark/path/format.js @@ -0,0 +1,31 @@ +var common = require('../common.js'); +var path = require('path'); + +var bench = common.createBenchmark(main, { + type: ['win32', 'posix'], + n: [1e7], +}); + +function main(conf) { + var n = +conf.n; + var p = path[conf.type]; + var test = conf.type === 'win32' ? { + root: 'C:\\', + dir: 'C:\\path\\dir', + base: 'index.html', + ext: '.html', + name: 'index' + } : { + root : '/', + dir : '/home/user/dir', + base : 'index.html', + ext : '.html', + name : 'index' + }; + + bench.start(); + for (var i = 0; i < n; i++) { + p.format(test); + } + bench.end(n); +} diff --git a/benchmark/path/isAbsolute.js b/benchmark/path/isAbsolute.js new file mode 100644 index 0000000000..c9489fe85c --- /dev/null +++ b/benchmark/path/isAbsolute.js @@ -0,0 +1,27 @@ +var common = require('../common.js'); +var path = require('path'); + +var bench = common.createBenchmark(main, { + type: ['win32', 'posix'], + n: [1e6], +}); + +function main(conf) { + var n = +conf.n; + var p = path[conf.type]; + var tests = conf.type === 'win32' + ? ['//server', 'C:\\baz\\..', 'bar\\baz', '.'] + : ['/foo/bar', '/baz/..', 'bar/baz', '.']; + + bench.start(); + for (var i = 0; i < n; i++) { + runTests(p, tests); + } + bench.end(n); +} + +function runTests(p, tests) { + for (var i = 0; i < tests.length; i++) { + p.isAbsolute(tests[i]); + } +} diff --git a/benchmark/path/join.js b/benchmark/path/join.js new file mode 100644 index 0000000000..54d02a6450 --- /dev/null +++ b/benchmark/path/join.js @@ -0,0 +1,18 @@ +var common = require('../common.js'); +var path = require('path'); + +var bench = common.createBenchmark(main, { + type: ['win32', 'posix'], + n: [1e6], +}); + +function main(conf) { + var n = +conf.n; + var p = path[conf.type]; + + bench.start(); + for (var i = 0; i < n; i++) { + p.join('/foo', 'bar', '', 'baz/asdf', 'quux', '..'); + } + bench.end(n); +} diff --git a/benchmark/path/normalize.js b/benchmark/path/normalize.js new file mode 100644 index 0000000000..10ca23037a --- /dev/null +++ b/benchmark/path/normalize.js @@ -0,0 +1,18 @@ +var common = require('../common.js'); +var path = require('path'); + +var bench = common.createBenchmark(main, { + type: ['win32', 'posix'], + n: [1e6], +}); + +function main(conf) { + var n = +conf.n; + var p = path[conf.type]; + + bench.start(); + for (var i = 0; i < n; i++) { + p.normalize('/foo/bar//baz/asdf/quux/..'); + } + bench.end(n); +} diff --git a/benchmark/path/relative.js b/benchmark/path/relative.js new file mode 100644 index 0000000000..3e12f8b532 --- /dev/null +++ b/benchmark/path/relative.js @@ -0,0 +1,26 @@ +var common = require('../common.js'); +var path = require('path'); + +var bench = common.createBenchmark(main, { + type: ['win32', 'posix'], + n: [1e5], +}); + +function main(conf) { + var n = +conf.n; + var runTest = conf.type === 'win32' ? runWin32Test : runPosixTest; + + bench.start(); + for (var i = 0; i < n; i++) { + runTest(); + } + bench.end(n); +} + +function runWin32Test() { + path.win32.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb'); +} + +function runPosixTest() { + path.posix.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); +} diff --git a/benchmark/path/resolve.js b/benchmark/path/resolve.js new file mode 100644 index 0000000000..ecf30f32fa --- /dev/null +++ b/benchmark/path/resolve.js @@ -0,0 +1,18 @@ +var common = require('../common.js'); +var path = require('path'); + +var bench = common.createBenchmark(main, { + type: ['win32', 'posix'], + n: [1e6], +}); + +function main(conf) { + var n = +conf.n; + var p = path[conf.type]; + + bench.start(); + for (var i = 0; i < n; i++) { + p.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile'); + } + bench.end(n); +}