diff options
author | Ryan <ry@tinyclouds.org> | 2009-07-13 12:48:59 +0200 |
---|---|---|
committer | Ryan <ry@tinyclouds.org> | 2009-07-13 16:38:55 +0200 |
commit | 05d6319fa034b8ef4d26445c59e3049bde3c41fb (patch) | |
tree | 6dc6f7445c40aea48af8e0b4575fc1d74e12ea13 /benchmark | |
parent | bf6a457f64d44fbd3cdd273559cad5dafd16676e (diff) | |
download | node-new-05d6319fa034b8ef4d26445c59e3049bde3c41fb.tar.gz |
Add benchmark scripts.
To use the benchmarks:
node benchmarks/run.js
or:
make benchmark
The numbers reported are the elapsed milliseconds the script took to
complete. Currently only benching HTTP code and timers.
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/process_loop.js | 16 | ||||
-rw-r--r-- | benchmark/run.js | 29 | ||||
-rw-r--r-- | benchmark/static_http_server.js | 39 | ||||
-rw-r--r-- | benchmark/timers.js | 5 |
4 files changed, 89 insertions, 0 deletions
diff --git a/benchmark/process_loop.js b/benchmark/process_loop.js new file mode 100644 index 0000000000..eb2df746b8 --- /dev/null +++ b/benchmark/process_loop.js @@ -0,0 +1,16 @@ +function next (i) { + if (i <= 0) return; + + var process = node.createProcess("echo hello"); + + process.addListener("output", function (chunk) { + if (chunk) print(chunk); + }); + + process.addListener("exit", function (code) { + if (code != 0) node.exit(-1); + next(i - 1); + }); +} + +next(500); diff --git a/benchmark/run.js b/benchmark/run.js new file mode 100644 index 0000000000..4bb2f5c4db --- /dev/null +++ b/benchmark/run.js @@ -0,0 +1,29 @@ +var benchmarks = [ "static_http_server.js" + , "timers.js" + , "process_loop.js" + ]; + +var benchmark_dir = node.path.dirname(__filename); + +function exec (script, callback) { + var command = ARGV[0] + " " + node.path.join(benchmark_dir, script); + var start = new Date(); + var process = node.createProcess(command); + process.addListener("exit", function (code) { + var elapsed = new Date() - start; + callback(elapsed, code); + }); +} + +function runNext (i) { + if (i >= benchmarks.length) return; + print(benchmarks[i] + ": "); + exec(benchmarks[i], function (elapsed, code) { + if (code != 0) { + puts("ERROR "); + } + puts(elapsed); + runNext(i+1); + }); +}; +runNext(0); diff --git a/benchmark/static_http_server.js b/benchmark/static_http_server.js new file mode 100644 index 0000000000..498f751f62 --- /dev/null +++ b/benchmark/static_http_server.js @@ -0,0 +1,39 @@ +var concurrency = 30; +var nrequests = 700; +var port = 8000; +var completed_requests = 0; +var bytes = 1024*5; + +var body = ""; +for (var i = 0; i < bytes; i++) { + body += "C"; +} + +var server = node.http.createServer(function (req, res) { + res.sendHeader(200, [ + ["Content-Type", "text/plain"], + ["Content-Length", body.length] + ]); + res.sendBody(body); + res.finish(); +}) +server.listen(port); + +function responseListener (res) { + res.addListener("complete", function () { + //puts("response " + completed_requests + " from client " + res.client.id); + if (completed_requests++ < nrequests) { + res.client.get("/").finish(responseListener); + } else { + server.close(); + } + }); +} + +function onLoad () { + for (var i = 0; i < concurrency; i++) { + var client = node.http.createClient(port); + client.id = i; + client.get("/").finish(responseListener); + } +} diff --git a/benchmark/timers.js b/benchmark/timers.js new file mode 100644 index 0000000000..095cca119b --- /dev/null +++ b/benchmark/timers.js @@ -0,0 +1,5 @@ +function next (i) { + if (i <= 0) return; + setTimeout(function () { next(i-1); }, 1); +} +next(700); |