THREE = {}; THREE.Vector3 = function ( x, y, z ) { this.x = x || 0; this.y = y || 0; this.z = z || 0; }; THREE.Vector3.prototype = { constructor: THREE.Vector3, lengthSq: function () { return this.x * this.x + this.y * this.y + this.z * this.z; }, length: function () { return Math.sqrt( this.lengthSq() ); }, length2: function () { return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); } }; var a = []; for ( var i = 0; i < 100000; i ++ ) { a[ i ] = new THREE.Vector3( i * 0.01, i * 2, i * -1.3 ); } var suite = new Benchmark.Suite; suite.add('NoCallTest', function() { var result = 0; for ( var i = 0; i < 100000; i ++ ) { var v = a[i]; result += Math.sqrt( v.x * v.x + v.y * v.y + v.z * v.z ); } }); suite.add('InlineCallTest', function() { var result = 0; for ( var i = 0; i < 100000; i ++ ) { result += a[ i ].length2(); } }); suite.add('FunctionCallTest', function() { var result = 0; for ( var i = 0; i < 100000; i ++ ) { result += a[ i ].length(); } }); suite.on('cycle', function(event, bench) { console.log(String(event.target)); }); suite.on('complete', function() { console.log('Fastest is ' + this.filter('fastest').pluck('name')); console.log( "Done" ); }); suite.run(true);