summaryrefslogtreecommitdiff
path: root/benchmark/fs-readfile.js
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2012-05-15 17:02:39 -0700
committerisaacs <i@izs.me>2012-05-16 20:04:44 -0700
commitee6c11876aa0064a34420eb5039bdc6c509fcff6 (patch)
tree1b87e44281bbeef1e25a92ba96feffe42b90312a /benchmark/fs-readfile.js
parenta3753b496e468ac24eee280485704db1241e75b5 (diff)
downloadnode-new-ee6c11876aa0064a34420eb5039bdc6c509fcff6.tar.gz
benchmark for fs.readfile
Diffstat (limited to 'benchmark/fs-readfile.js')
-rw-r--r--benchmark/fs-readfile.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/benchmark/fs-readfile.js b/benchmark/fs-readfile.js
new file mode 100644
index 0000000000..3aa72e1a45
--- /dev/null
+++ b/benchmark/fs-readfile.js
@@ -0,0 +1,72 @@
+// Call fs.readFile over and over again really fast.
+// Then see how many times it got called.
+// Yes, this is a silly benchmark. Most benchmarks are silly.
+
+var path = require('path');
+var filename = path.resolve(__dirname, 'http.sh');
+var fs = require('fs');
+var count = 0;
+var go = true;
+var len = -1;
+var assert = require('assert');
+
+var concurrency = 1;
+var encoding = null;
+var time = 10;
+
+for (var i = 2; i < process.argv.length; i++) {
+ var arg = process.argv[i];
+ if (arg.match(/^-e$/)) {
+ encoding = process.argv[++i] || null;
+ } else if (arg.match(/^-c$/)) {
+ concurrency = ~~process.argv[++i];
+ if (concurrency < 1) concurrency = 1;
+ } else if (arg === '-t') {
+ time = ~~process.argv[++i];
+ if (time < 1) time = 1;
+ }
+}
+
+
+setTimeout(function() {
+ go = false;
+}, time * 1000);
+
+function round(n) {
+ return Math.floor(n * 100) / 100;
+}
+
+var start = process.hrtime();
+while (concurrency--) readFile();
+
+function readFile() {
+ if (!go) {
+ process.stdout.write('\n');
+ console.log('read the file %d times (higher is better)', count);
+ var end = process.hrtime();
+ var elapsed = [end[0] - start[0], end[1] - start[1]];
+ var ns = elapsed[0] * 1E9 + elapsed[1];
+ var nsper = round(ns / count);
+ console.log('%d ns per read (lower is better)', nsper);
+ var readsper = round(count / (ns / 1E9));
+ console.log('%d reads per sec (higher is better)', readsper);
+ process.exit(0);
+ return;
+ }
+
+ if (!(count % 1000)) {
+ process.stdout.write('.');
+ }
+
+ if (encoding) fs.readFile(filename, encoding, then);
+ else fs.readFile(filename, then);
+
+ function then(er, data) {
+ assert.ifError(er);
+ count++;
+ // basic sanity test: we should get the same number of bytes each time.
+ if (count === 1) len = data.length;
+ else assert(len === data.length);
+ readFile();
+ }
+}