bench.js 4.37 KB
var Gun = (typeof window !== "undefined")? window.Gun : require('../../../gun/gun');

var Radisk = (Gun.window && window.Radisk) || require('../../../gun/lib/radisk');
Gun.TESTING = true;
try{localStorage.clear()}catch(e){}
try{indexedDB.deleteDatabase('radatatest');}catch(e){}
try{indexedDB.deleteDatabase('radata');}catch(e){}

var opt = {localStorage: false};
//opt.chunk = 1024;
opt.store = (Gun.window && window.RindexedDB(opt)) || require('../../../gun/lib/rfs')(opt)
var rad = Radisk(opt);
//var gun = Gun(opt);
var gun = Gun('http://localhost:8765/gun');

Gun.window && (wait.onchange = function(){ spam.wait = this.value })
Gun.window && (burst.onchange = function(){ spam.burst = this.value })
//setTimeout(spam, 1);
function spam(){
	//spam.max = 100000; spam.left = spam.max; spam.wait = 1; spam.burst = 250; spam.c = 0; spam.s = (+new Date);
	//spam.max = 1000000; spam.left = spam.max; spam.wait = 0; spam.burst = 100; spam.c = 0; spam.s = (+new Date);
	//spam.max = 300000; spam.left = spam.max; spam.wait = 1; spam.burst = 5; spam.c = 0; spam.s = (+new Date);
	//spam.max = 100000; spam.left = spam.max; spam.wait = 0; spam.burst = 2; spam.c = 0; spam.s = (+new Date);
	//spam.max = 100000; spam.left = spam.max; spam.wait = 20; spam.burst = 2; spam.c = 0; spam.s = (+new Date);
	//spam.max = 100; spam.left = spam.max; spam.wait = 1; spam.burst = 1; spam.c = 0; spam.s = (+new Date);
	spam.max = 100000; spam.left = spam.max; spam.wait = 100; spam.burst = 100; spam.c = 99; spam.s = (+new Date);
	var S = +new Date, slow = 0; console.only.i = 1;
	var to = setTimeout(function gap(){
		if(spam.c >= spam.max){ clearTimeout(to); return; }
		setTimeout(gap, Math.random() * 100);
		var b = spam.burst;
		b = Math.ceil(Math.random() * b);
		//console.log('spam', +new Date - S, spam.c); S = +new Date;
		if(!b){ b = burst = 1 }
		while(b--){ go(++spam.c) }
		function go(i){ var d = 0, s = +new Date;
			i = Math.random().toString(32).slice(2);
			//console.log('go', spam.c, i);
			//setTimeout(function(){ var ack = {err: 0, ok: 1};
			//loc.put(i, {test: i}, function(err, ok){ var ack = {err: err, ok: ok};
			//ind.put(i, {test: i}, function(err, ok){ var ack = {err: err, ok: ok};
			//rad(i, {test: i}, function(err, ok){ var ack = {err: err, ok: ok};
			var ref = gun.get(i).put({test: i}, function(ack){
				var t = (+new Date - s)/1000; if(1 < t){ ++slow; }
				if(ack.err){ console.log(ack); }
				if(d++){ return }
				if(--spam.left){ return }
				spam.end = (+new Date) - spam.s;
				console.log('DONE!\n', spam.max, 'in', spam.end/1000, 'seconds\n', Math.round(spam.max / (spam.end/1000)), 'per second. Slow:' + slow);
				Gun.window && (document.body.style.backgroundColor = 'lime');
			});
		}
	},spam.wait);
	setInterval(function(){
		if(spam.end === true){ return }
		if(spam.end){ spam.end = true }
		var t = (+new Date) - spam.s, tmp, sec;
		var status = 'saved\n'+ (tmp = (spam.max - spam.left)) +' in '+ (sec = (t/1000)) +' seconds\n'+ Math.round(tmp / sec) +' per second';
		(Gun.window && (debugs.innerText = status)) || console.log(status.replace(/\n/ig,' '));
	}, 500);
}
!Gun.window && setTimeout(spam,1);

;(function(){
if(!Gun.window){ return }
;(function(){
var f = 'index';
indexedDB.deleteDatabase(f);
var o = indexedDB.open(f, 1), ind = {}, db;
o.onupgradeneeded = function(eve){ (eve.target.result).createObjectStore(f) }
o.onsuccess = function(){ db = o.result }
o.onerror = function(eve){ console.log(eve||1); }
ind.put = function(key, data, cb){
	if(!db){ setTimeout(function(){ ind.put(key, data, cb) },9); return }
	var tx = db.transaction([f], 'readwrite');
	var obj = tx.objectStore(f);
	var req = obj.put(data, ''+key);
	req.onsuccess = obj.onsuccess = tx.onsuccess = function(){ cb(null, 1) }
	req.onabort = obj.onabort = tx.onabort = function(eve){ cb(eve||2) }
	req.onerror = obj.onerror = tx.onerror = function(eve){ cb(eve||3) }
}
ind.get = function(key, cb){
	if(!db){ setTimeout(function(){ ind.get(key, cb) },9); return }
	var tx = db.transaction([f], 'readwrite');
	var obj = tx.objectStore(f);
	var req = obj.get(''+key);
	req.onsuccess = function(){ cb(null, req.result) }
	req.onabort = function(eve){ cb(eve||4) }
	req.onerror = function(eve){ cb(eve||5) }
}
window.ind = ind;
}());

;(function(){
localStorage.clear();
var ls = localStorage, loc = {};
loc.put = function(key, data, cb){ ls[''+key] = data; cb(null, 1) }
loc.get = function(key, cb){ cb(null, ls[''+key]) }
window.loc = loc;
}());
}());