summaryrefslogtreecommitdiff
path: root/node_modules/mongoose/benchmarks/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/mongoose/benchmarks/index.js')
-rw-r--r--node_modules/mongoose/benchmarks/index.js128
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