prof back in

This commit is contained in:
Mark Nadal 2020-03-03 11:25:23 -08:00
parent c58e412208
commit b4568e52c3
4 changed files with 24 additions and 16 deletions

View File

@ -29,7 +29,7 @@
.tall { height: 5em; } .tall { height: 5em; }
</style> </style>
<div class="center"><span class="shout" id="peers">0</span> peers <span class="shout" id="time">0</span> min <span class="shout" id="nodes">0</span> nodes <span class="shout" id="hours">0</span> hours</div> <div class="center"><span class="shout" id="peers">0</span> peers <span class="shout" id="time">0</span> min <span class="shout" id="nodes">0</span> nodes <span class="shout" id="hours">0</span> hours <span class="shout" id="block">0</span> block</div>
<input id="url" class="center input crack" placeholder="enter peer stats source url"> <input id="url" class="center input crack" placeholder="enter peer stats source url">
@ -44,10 +44,12 @@
<script src="./jquery.js"></script> <script src="./jquery.js"></script>
<script src="./smoothie.js" charset="utf-8"></script> <script src="./smoothie.js" charset="utf-8"></script>
<script> <script>
var up; var up, br = 0, bt = 0;
var fetchData = async function(){ var fetchData = async function(){
// fetch the data from server // fetch the data from server
var S = +new Date;
var data = await (await fetch(url.value||(location.origin+'/gun/stats.radata'), {method: 'GET',mode: 'cors'})).json(); var data = await (await fetch(url.value||(location.origin+'/gun/stats.radata'), {method: 'GET',mode: 'cors'})).json();
$('#block').text((br += (+new Date - S)) / ++bt);
data.over = (data.over/1000) || 15; data.over = (data.over/1000) || 15;
$('#peers').text(data.peers.count); $('#peers').text(data.peers.count);
$('#time').text((data.peers.time / 1000 / 60).toFixed(0)); $('#time').text((data.peers.time / 1000 / 60).toFixed(0));

10
gun.js
View File

@ -201,6 +201,7 @@
if(Q.length){ Q.push(cb); return } Q = [cb]; if(Q.length){ Q.push(cb); return } Q = [cb];
to(function go(S){ S = S || +new Date; to(function go(S){ S = S || +new Date;
var i = 0, cb; while(i < 9 && (cb = Q[i++])){ cb() } var i = 0, cb; while(i < 9 && (cb = Q[i++])){ cb() }
console.STAT && console.STAT(S, +new Date - S, 'puff');
if(cb && !(+new Date - S)){ return go(S) } if(cb && !(+new Date - S)){ return go(S) }
if(!(Q = Q.slice(i)).length){ return } if(!(Q = Q.slice(i)).length){ return }
to(go, 0); to(go, 0);
@ -2072,10 +2073,12 @@
console.STAT && console.STAT(+new Date, msg.length, '# on hear batch'); console.STAT && console.STAT(+new Date, msg.length, '# on hear batch');
var P = opt.puff; var P = opt.puff;
(function go(){ (function go(){
var S = +new Date;
//var P = peer.puff || opt.puff, s = +new Date; // TODO: For future, but in mix? //var P = peer.puff || opt.puff, s = +new Date; // TODO: For future, but in mix?
var i = 0, m; while(i < P && (m = msg[i++])){ hear(m, peer) } var i = 0, m; while(i < P && (m = msg[i++])){ hear(m, peer) }
//peer.puff = Math.ceil((+new Date - s)? P * 1.1 : P * 0.9); //peer.puff = Math.ceil((+new Date - s)? P * 1.1 : P * 0.9);
msg = msg.slice(i); // slicing after is faster than shifting during. msg = msg.slice(i); // slicing after is faster than shifting during.
console.STAT && console.STAT(S, +new Date - S, 'hear loop');
flush(peer); // force send all synchronously batched acks. flush(peer); // force send all synchronously batched acks.
if(!msg.length){ return } if(!msg.length){ return }
puff(go, 0); puff(go, 0);
@ -2152,9 +2155,9 @@
if(!peer && mesh.way){ return mesh.way(msg) } if(!peer && mesh.way){ return mesh.way(msg) }
if(!peer || !peer.id){ message = msg; if(!peer || !peer.id){ message = msg;
if(!Type.obj.is(peer || opt.peers)){ return false } if(!Type.obj.is(peer || opt.peers)){ return false }
var S = +new Date;
var P = opt.puff, ps = opt.peers, pl = Object.keys(peer || opt.peers || {}); // TODO: BETTER PERF? No object.keys? It is polyfilled by Type.js tho. var P = opt.puff, ps = opt.peers, pl = Object.keys(peer || opt.peers || {}); // TODO: BETTER PERF? No object.keys? It is polyfilled by Type.js tho.
;(function go(){ ;(function go(){
var S = +new Date;
//Type.obj.map(peer || opt.peers, each); // in case peer is a peer list. //Type.obj.map(peer || opt.peers, each); // in case peer is a peer list.
loop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack loop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack
var i = 0, p; while(i < 9 && (p = (pl||'')[i++])){ var i = 0, p; while(i < 9 && (p = (pl||'')[i++])){
@ -2163,7 +2166,8 @@
} }
meta.raw = wr; loop = 0; meta.raw = wr; loop = 0;
pl = pl.slice(i); // slicing after is faster than shifting during. pl = pl.slice(i); // slicing after is faster than shifting during.
if(!pl.length){ console.STAT && console.STAT(S, +new Date - S, 'say loop'); return } console.STAT && console.STAT(S, +new Date - S, 'say loop');
if(!pl.length){ return }
puff(go, 0); puff(go, 0);
dup_track(msg['@']); // keep for later dup_track(msg['@']); // keep for later
}()); }());
@ -2186,7 +2190,7 @@
//peer.batch = []; //peer.batch = [];
peer.batch = '['; // TODO: Prevent double JSON! peer.batch = '['; // TODO: Prevent double JSON!
var S = +new Date, ST; var S = +new Date, ST;
puff(function(){ setTimeout(function(){
console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, '0ms TO', id, peer.id); console.STAT && (ST = +new Date - S) > 9 && console.STAT(S, ST, '0ms TO', id, peer.id);
flush(peer); flush(peer);
}, opt.gap); }, opt.gap);

View File

@ -19,7 +19,8 @@
function ename(t){ return encodeURIComponent(t).replace(/\*/g, '%2A') } function ename(t){ return encodeURIComponent(t).replace(/\*/g, '%2A') }
function atomic(v){ return u !== v && (!v || 'object' != typeof v) } function atomic(v){ return u !== v && (!v || 'object' != typeof v) }
var puff = setTimeout.puff || (typeof setImmediate !== "undefined")? setTimeout : setImmediate; var timediate = (typeof setImmediate !== "undefined")? setTimeout : setImmediate;
var puff = setTimeout.puff || timediate;
var map = Gun.obj.map; var map = Gun.obj.map;
var obj_empty = Gun.obj.empty; var obj_empty = Gun.obj.empty;
var ST = 0; var ST = 0;
@ -96,7 +97,7 @@
delete disk.tags; delete disk.tags;
r.write(file, disk, s.ack, u, DBG); r.write(file, disk, s.ack, u, DBG);
} }
s.ack = function puff(err, ok){ s.ack = function(err, ok){
DBG && (DBG.sa = DBG.sa || +new Date); DBG && (DBG.sa = DBG.sa || +new Date);
DBG && (DBG.sal = q.length); DBG && (DBG.sal = q.length);
var ack, tmp; var ack, tmp;
@ -284,7 +285,11 @@
if(!o.more){ cb(g.err, data, o); return } if(!o.more){ cb(g.err, data, o); return }
if(data){ cb(g.err, data, o) } if(data){ cb(g.err, data, o) }
if(o.parsed >= o.limit){ return } if(o.parsed >= o.limit){ return }
puff(function(){ r.parse(o.next, g.check) },0); var S = +new Date;
timediate(function(){
console.STAT && console.STAT(S, +new Date - S, 'rad more');
r.parse(o.next, g.check);
},0);
} }
g.check = function(err, disk, info){ g.check = function(err, disk, info){
g.get(err, disk, info); g.get(err, disk, info);
@ -367,15 +372,12 @@
p.map = function(){ p.map = function(){
if(!q || !q.length){ return } if(!q || !q.length){ return }
//var i = 0, l = q.length, ack; //var i = 0, l = q.length, ack;
var S = +new Date;
var err = p.err, data = p.not? u : p.disk; var err = p.err, data = p.not? u : p.disk;
SM = SM || +new Date; SL = SL || q.length;
//for(;i < l; i++){ (ack = q[i]) && ack(err, data, info) }
var i = 0, ack; while(i < 9 && (ack = q[i++])){ ack(err, data, info) } var i = 0, ack; while(i < 9 && (ack = q[i++])){ ack(err, data, info) }
if(!(q = q.slice(i)).length){ console.STAT && console.STAT(S, +new Date - S, 'rad packs', ename(file));
console.STAT && console.STAT(S, +new Date - SM, 'rad packs', ename(file)); console.STAT && console.STAT(S, i, 'rad packs #', ename(file));
console.STAT && console.STAT(S, SL, 'rad packs #', ename(file)); if(!(q = q.slice(i)).length){ return }
return
}
puff(p.map, 0); puff(p.map, 0);
} }
p.ack = function(cb){ p.ack = function(cb){

View File

@ -7,7 +7,7 @@
"ios": "browser.ios.js", "ios": "browser.ios.js",
"android": "browser.android.js", "android": "browser.android.js",
"scripts": { "scripts": {
"start": "node examples/http.js", "start": "node --prof examples/http.js",
"debug": "node --prof-process --preprocess -j isolate*.log > v8.json && rm isolate*.log && echo 'drag & drop ./v8.json into https://mapbox.github.io/flamebearer/'", "debug": "node --prof-process --preprocess -j isolate*.log > v8.json && rm isolate*.log && echo 'drag & drop ./v8.json into https://mapbox.github.io/flamebearer/'",
"https": "HTTPS_KEY=test/https/server.key HTTPS_CERT=test/https/server.crt npm start", "https": "HTTPS_KEY=test/https/server.key HTTPS_CERT=test/https/server.crt npm start",
"prepublishOnly": "npm run unbuild", "prepublishOnly": "npm run unbuild",