diff options
Diffstat (limited to 'node_modules/mongoose/benchmarks/index.js')
| -rw-r--r-- | node_modules/mongoose/benchmarks/index.js | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/node_modules/mongoose/benchmarks/index.js b/node_modules/mongoose/benchmarks/index.js new file mode 100644 index 0000000..4695113 --- /dev/null +++ b/node_modules/mongoose/benchmarks/index.js @@ -0,0 +1,128 @@ +Error.stackTraceLimit = Infinity; +var mongoose = require('../') + , Schema = mongoose.Schema; + +var DocSchema = new Schema({ + title: String +}); + +var AllSchema = new Schema({ + string: String + , number: Number + , date : Date + , bool : Boolean + , buffer: Buffer + , objectid: Schema.ObjectId + , array : Array + , strings: [String] + , numbers: [Number] + , dates : [Date] + , bools : [Boolean] + , buffers: [Buffer] + , objectids: [Schema.ObjectId] + , docs : [DocSchema] +}); + +var A = mongoose.model('A', AllSchema); + +// bench the normal way +// the try building the doc into the document prototype +// and using inheritance and bench that +// +// also, bench using listeners for each subdoc vs one +// listener that knows about all subdocs and notifies +// them. + +function run (label, fn) { + console.error('running %s', label); + var started = process.memoryUsage(); + var start = new Date; + var total = 10000; + var i = total; + while (i--) { + a = fn(); + if (i%2) + a.toObject({ depopulate: true }); + else + a._delta(); + } + var time = (new Date - start)/1000; + console.error(label + ' took %d seconds for %d docs (%d dps)', time, total, total/time); + var used = process.memoryUsage(); + console.error(((used.vsize - started.vsize) / 1048576)+' MB'); +} + +run('string', function () { + return new A({ + string: "hello world" + }); +}) +run('number', function () { + return new A({ + number: 444848484 + }); +}) +run('date', function () { + return new A({ + date: new Date + }); +}) +run('bool', function () { + return new A({ + bool: true + }); +}) +run('buffer', function () { + return new A({ + buffer: new Buffer(0) + }); +}) +run('objectid', function () { + return new A({ + objectid: new mongoose.Types.ObjectId() + }); +}) +run('array of mixed', function () { + return new A({ + array: [4,{},[],"asdfa"] + }); +}) +run('array of strings', function () { + return new A({ + strings: ["one","two","three","four"] + }); +}) +run('array of numbers', function () { + return new A({ + numbers:[72,6493,83984643,348282.55] + }); +}) +run('array of dates', function () { + return new A({ + dates:[new Date, new Date, new Date] + }); +}) +run('array of bools', function () { + return new A({ + bools:[true, false, false, true, true] + }); +}) +run('array of buffers', function () { + return new A({ + buffers: [new Buffer([33]), new Buffer([12])] + }); +}) +run('array of objectids', function () { + return new A({ + objectids: [new mongoose.Types.ObjectId] + }); +}) +run('array of docs', function () { + return new A({ + docs: [ {title: "yo"}, {title:"nowafasdi0fas asjkdfla fa" }] + }); +}) + +//console.error(a.toObject({depopulate:true})); + +// --trace-opt --trace-deopt --trace-bailout |
