closures.js 1.01 KB
Newer Older
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
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

new BenchmarkSuite('Closures', [1000], [
  new Benchmark('ShortLivingClosures', false, false, 0,
    ShortLivingClosures, ShortLivingClosuresSetup, ShortLivingClosuresTearDown)
]);

// ----------------------------------------------------------------------------


// The pattern is this example is very common in Node.js.
var fs = {
  readFile: function(filename, cb) {
    cb(null, {length: 12});
  }
};


function printLength (filename) {
  fs.readFile(filename, foo);

  function foo (err, buf)  {
    if (err) return;
    for (var j = 0; j<1000; j++) {
      // Do some work to make the optimization actually worth while
      buf.length++;
    }
    return (buf.length);
  }
}


function ShortLivingClosuresSetup() {}

function ShortLivingClosures() {
  result = printLength('foo_bar.js');
}

function ShortLivingClosuresTearDown() {
  return result == 1012;
}