summaryrefslogtreecommitdiff
path: root/benchmark/fs-readfile.js
blob: 3aa72e1a4520ddd038c2a1bf0ab548c2d03822e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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();
  }
}