From 10ba95c11a9a3857f5e378e343b3febd107dae70 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Thu, 13 Sep 2012 01:18:09 +0200 Subject: [PATCH] bench: improve url parser benchmark --- benchmark/url.js | 61 +++++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/benchmark/url.js b/benchmark/url.js index c35cd959f06..12efe96c3fc 100644 --- a/benchmark/url.js +++ b/benchmark/url.js @@ -1,22 +1,41 @@ -var url = require('url'), - urls = [ - 'http://nodejs.org/docs/latest/api/url.html#url_url_format_urlobj', - 'http://blog.nodejs.org/', - 'https://encrypted.google.com/search?q=url&q=site:npmjs.org&hl=en', - 'javascript:alert("node is awesome");', - 'some.ran/dom/url.thing?oh=yes#whoo' - ], - paths = [ - '../foo/bar?baz=boom', - 'foo/bar', - 'http://nodejs.org', - './foo/bar?baz' - ]; +var util = require('util'); +var url = require('url') -urls.forEach(url.parse); -urls.forEach(url.format); -urls.forEach(function(u){ - paths.forEach(function(p){ - url.resolve(u, p); - }); -}); \ No newline at end of file +var urls = [ + 'http://nodejs.org/docs/latest/api/url.html#url_url_format_urlobj', + 'http://blog.nodejs.org/', + 'https://encrypted.google.com/search?q=url&q=site:npmjs.org&hl=en', + 'javascript:alert("node is awesome");', + 'some.ran/dom/url.thing?oh=yes#whoo' +]; + +var paths = [ + '../foo/bar?baz=boom', + 'foo/bar', + 'http://nodejs.org', + './foo/bar?baz' +]; + +benchmark('parse()', url.parse); +benchmark('format()', url.format); + +paths.forEach(function(p) { + benchmark('resolve("' + p + '")', function(u) { url.resolve(u, p) }); +}); + +function benchmark(name, fun) { + process.stdout.write('benchmarking ' + name + ' ... '); + + var timestamp = process.hrtime(); + for (var i = 0; i < 25 * 1000; ++i) { + for (var j = 0, k = urls.length; j < k; ++j) fun(urls[j]); + } + timestamp = process.hrtime(timestamp); + + var seconds = timestamp[0]; + var millis = timestamp[1]; // actually nanoseconds + while (millis > 1000) millis /= 10; + var time = (seconds * 1000 + millis) / 1000; + + process.stdout.write(util.format('%s sec\n', time.toFixed(3))); +}