From 97c440fd8bf0a6cc5294701a399dc39a494f17e3 Mon Sep 17 00:00:00 2001 From: biglyderv Date: Thu, 6 Feb 2025 16:38:50 -0500 Subject: [PATCH] better handling of large arrays --- rank.js | 20 +++++++++++++------- site.js | 3 ++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/rank.js b/rank.js index 841d950..ae0a455 100644 --- a/rank.js +++ b/rank.js @@ -15,7 +15,7 @@ function multiplyMatrix(a, b, c) { } // derived from https://git.dervland.net/biglyderv/new-bigly-chat/src/branch/master/docs/stats.php -function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu = false, arrayMax = 800) { +function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu = false, arrayMax = 800, oldVals = false) { let fng = {}; let fnc = {}; @@ -25,22 +25,28 @@ function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu let keys = Object.keys(result); let leftover = []; - keys = keys.sort((a,b) => result[a].followers.length < result[b].followers.length); + + if (oldVals) { + keys = keys.sort((a, b) => oldVals[b] - oldVals[a]); + } else { + keys = keys.sort((a, b) => result[b].followers.length - result[a].followers.length); + } + let kl2 = keys.length; if (kl2 > arrayMax) { console.warn(`Array too big. Splitting into multiple arrays...`); let ll = {}; let hh = keys.slice(arrayMax); - for (let g of hh) { + for (let g of hh) { ll[g] = result[g]; } - leftover = rankCalc(ll,iterations,main,domainMode,isGpu,arrayMax); + leftover = rankCalc(ll, iterations, main, domainMode, isGpu, arrayMax); for (let i in leftover) { - leftover[i] /= (kl2 / arrayMax) * 3; + leftover[i] /= (kl2 / arrayMax); } } - keys.length = Math.min(keys.length,1000); + keys.length = Math.min(keys.length, 1000); let rl = keys.length; rls = rl ** 2; @@ -163,7 +169,7 @@ function rankCalc(result, iterations = 10, main = [], domainMode = false, isGpu } } - pr = Object.assign(pr,leftover); + pr = Object.assign(pr, leftover); let ov = Object.keys(pr); let an = ov.filter(i => !isNaN(pr[i]) && main.indexOf(i) != -1); diff --git a/site.js b/site.js index 1e55f67..f2b022e 100644 --- a/site.js +++ b/site.js @@ -249,6 +249,7 @@ async function siteCollector(user, path, site, useLimit, data2, settings) { } async function main(settings) { + let calcedRank = {}; let { site, discardThreshold, depth, user, matrixIterations, useArchive, } = settings; user = user.split(','); @@ -317,7 +318,7 @@ async function main(settings) { } } console.log(`Graph is fully repaired`); - let calcedRank = rankCalc(data, (i == depth - 1) ? matrixIterations : 3, user, site == 'url', settings.isGpu, settings.arrayMax) + calcedRank = rankCalc(data, (i == depth - 1) ? matrixIterations : 3, user, site == 'url', settings.isGpu, settings.arrayMax, calcedRank) dat = Object.entries(calcedRank); dat = dat.sort((a, b) => b[1] - a[1]); console.log(`Graph is calculated with ${dat.length} entries`);