From 63dfdaf2c2445e61ee05868a3e6db543f629fffc Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 23 Oct 2022 20:51:56 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/DbSearcher.js | 85 +++++++++++++++++++-------------------- server/core/HeavyCalc.js | 8 ++-- 2 files changed, 45 insertions(+), 48 deletions(-) diff --git a/server/core/DbSearcher.js b/server/core/DbSearcher.js index f4e24f6..d5e4ed5 100644 --- a/server/core/DbSearcher.js +++ b/server/core/DbSearcher.js @@ -56,57 +56,54 @@ class DbSearcher { } async calcIntersect(idsArr) { - return await this.heavyCalc.run({ - args: idsArr, - fn: (args) => { - //из utils.intersectSet - const intersectSet = (arrSet) => { - if (!arrSet.length) - return new Set(); + return await this.heavyCalc.run(idsArr, (args) => { + //из utils.intersectSet + const intersectSet = (arrSet) => { + if (!arrSet.length) + return new Set(); - let min = 0; - let size = arrSet[0].size; - for (let i = 1; i < arrSet.length; i++) { - if (arrSet[i].size < size) { - min = i; - size = arrSet[i].size; - } + let min = 0; + let size = arrSet[0].size; + for (let i = 1; i < arrSet.length; i++) { + if (arrSet[i].size < size) { + min = i; + size = arrSet[i].size; } - - const result = new Set(); - for (const elem of arrSet[min]) { - let inAll = true; - for (let i = 0; i < arrSet.length; i++) { - if (i === min) - continue; - if (!arrSet[i].has(elem)) { - inAll = false; - break; - } - } - - if (inAll) - result.add(elem); - } - - return result; - }; - - //считаем пересечение, если надо - let result = []; - - if (args.length > 1) { - const arrSet = args.map(ids => new Set(ids)); - result = Array.from(intersectSet(arrSet)); - } else if (args.length == 1) { - result = args[0]; } - //сортировка - result.sort((a, b) => a - b); + const result = new Set(); + for (const elem of arrSet[min]) { + let inAll = true; + for (let i = 0; i < arrSet.length; i++) { + if (i === min) + continue; + if (!arrSet[i].has(elem)) { + inAll = false; + break; + } + } + + if (inAll) + result.add(elem); + } return result; + }; + + //считаем пересечение, если надо + let result = []; + + if (args.length > 1) { + const arrSet = args.map(ids => new Set(ids)); + result = Array.from(intersectSet(arrSet)); + } else if (args.length == 1) { + result = args[0]; } + + //сортировка + result.sort((a, b) => a - b); + + return result; }); } diff --git a/server/core/HeavyCalc.js b/server/core/HeavyCalc.js index 2c08891..4f8ea97 100644 --- a/server/core/HeavyCalc.js +++ b/server/core/HeavyCalc.js @@ -66,7 +66,7 @@ class CalcThread { } //async - run(params) {//args, fn + run(args, fn) { return new Promise((resolve, reject) => { this.requestId++; @@ -78,7 +78,7 @@ class CalcThread { }); if (this.worker) { - this.worker.postMessage({requestId: this.requestId, args: params.args, fn: params.fn.toString()}); + this.worker.postMessage({requestId: this.requestId, args, fn: fn.toString()}); } else { reject(new Error('Worker does not exist')); } @@ -112,7 +112,7 @@ class HeavyCalc { } } - async run(params) { + async run(args, fn) { if (this.terminated || !this.workers.length) throw new Error('All workers terminated'); @@ -125,7 +125,7 @@ class HeavyCalc { try { this.load[found]++; - return await this.workers[found].run(params); + return await this.workers[found].run(args, fn); } finally { this.load[found]--; }