Skip to content

Commit 75ded7e

Browse files
authored
Merge pull request #1506 from input-output-hk/refactor/small-optimization
LW-11656 Optimize the aggregation of addresses subscribed by clients
2 parents 60f4157 + 9bbae51 commit 75ded7e

File tree

1 file changed

+11
-3
lines changed
  • packages/cardano-services/src/WsServer

1 file changed

+11
-3
lines changed

packages/cardano-services/src/WsServer/server.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,17 @@ export class CardanoWsServer extends WsProvider {
220220
};
221221

222222
const loadTransactions = async () => {
223-
const addressesSet = new Set<Cardano.PaymentAddress>();
224-
for (const ws of this.wss.clients) for (const address of ws.addresses) addressesSet.add(address);
225-
const addresses = [...addressesSet];
223+
const addressesObj: Record<Cardano.PaymentAddress, true> = {};
224+
225+
// Benchmarks
226+
// https://jsbenchmark.com/#eyJjYXNlcyI6W3siaWQiOiI5aTVXR2E3bXp0MEE2LU1FZFJDaVQiLCJjb2RlIjoiY29uc3QgeyB3c3MgfSA9IERBVEE7XG5cbmNvbnN0IGFkZHJlc3Nlc01hcCA9IG5ldyBNYXAoKTtcbmZvciAoY29uc3Qgd3Mgb2Ygd3NzLmNsaWVudHMpXG4gIGZvciAoY29uc3QgYWRkcmVzcyBvZiB3cy5hZGRyZXNzZXMpXG4gICAgYWRkcmVzc2VzTWFwLnNldChhZGRyZXNzLCB0cnVlKTtcbmNvbnN0IGFkZHJlc3NlcyA9IFsuLi5hZGRyZXNzZXNNYXAua2V5cygpXTsiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiT3JpZ2luYWwifSx7ImlkIjoibVFoLUFZM3JwX1dPWC1keDN6RTJVIiwiY29kZSI6ImNvbnN0IHsgd3NzIH0gPSBEQVRBO1xuICAgICAgICAgIFxuY29uc3QgYWRkcmVzc2VzTWFwID0gWy4uLndzcy5jbGllbnRzXVxuICAuZmxhdE1hcChpdCA9PiBpdC5hZGRyZXNzZXMpXG4gIC5yZWR1Y2UoKHJlc3VsdCwgaXQpID0-ICh7Li4ucmVzdWx0LCBbaXRdOiB0cnVlfSksIHt9KTtcbmNvbnN0IGFkZHJlc3NlcyA9IFtPYmplY3Qua2V5cyhhZGRyZXNzZXNNYXApXTsiLCJuYW1lIjoiRmlyc3QgcHJvcG9zYWwiLCJkZXBlbmRlbmNpZXMiOltdfSx7ImlkIjoibE5fM29CdS1rQlVUMlJ5U24wcU1tIiwiY29kZSI6ImNvbnN0IHsgd3NzIH0gPSBEQVRBO1xuXG5jb25zdCBhZGRyZXNzZXNNYXAgPSBbLi4ud3NzLmNsaWVudHNdXG4gIC5mbGF0TWFwKGl0ID0-IGl0LmFkZHJlc3NlcylcbiAgLnJlZHVjZSgocmVzdWx0LCBpdCkgPT4ge1xuICBcdHJlc3VsdFtpdF0gPSB0cnVlXG5cdHJldHVybiByZXN1bHRcbiAgfSwge30pO1xuY29uc3QgYWRkcmVzc2VzID0gW09iamVjdC5rZXlzKGFkZHJlc3Nlc01hcCldOyIsIm5hbWUiOiJTZWNvbmQgcHJvcG9zYWwiLCJkZXBlbmRlbmNpZXMiOltdfSx7ImlkIjoiSW5zLXdFX2p2amVLYzlUOUlTaWFfIiwiY29kZSI6ImNvbnN0IHsgd3NzIH0gPSBEQVRBO1xuXG5jb25zdCBhZGRyZXNzZXNTZXQgPSBuZXcgU2V0KCk7XG5mb3IgKGNvbnN0IHdzIG9mIHdzcy5jbGllbnRzKVxuICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2Ygd3MuYWRkcmVzc2VzKVxuICAgIGFkZHJlc3Nlc1NldC5hZGQoYWRkcmVzcyk7XG5jb25zdCBhZGRyZXNzZXMgPSBbLi4uYWRkcmVzc2VzU2V0XTsiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiVGhpcmQgcHJvcG9zYWwifSx7ImlkIjoiNE9hWEF0REJFb184eXRrVDFyWGhKIiwiY29kZSI6ImNvbnN0IHsgd3NzIH0gPSBEQVRBO1xuXG5jb25zdCBhZGRyZXNzZXNTZXQgPSBuZXcgU2V0KFsuLi53c3MuY2xpZW50c10uZmxhdE1hcCh3cyA9PiB3cy5hZGRyZXNzZXMpKTtcbmNvbnN0IGFkZHJlc3NlcyA9IFsuLi5hZGRyZXNzZXNTZXRdOyIsImRlcGVuZGVuY2llcyI6W10sIm5hbWUiOiJmbGF0TWFwIn0seyJpZCI6Im15SlJyRmpHUzROZC1YYXdZYmo5QyIsImNvZGUiOiJjb25zdCB7IHdzcyB9ID0gREFUQTtcblxuY29uc3QgYWRkcmVzc2VzU2V0ID0gbmV3IFNldCgpO1xuZm9yIChjb25zdCB3cyBvZiB3c3MuY2xpZW50cykge1xuICBjb25zdCBhZGRyZXNzZXMgPSB3cy5hZGRyZXNzZXM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgKytpKVxuICAgIGFkZHJlc3Nlc1NldC5hZGQoYWRkcmVzc2VzW2ldKTtcbn1cbmNvbnN0IGFkZHJlc3NlcyA9IFsuLi5hZGRyZXNzZXNTZXRdOyIsImRlcGVuZGVuY2llcyI6W10sIm5hbWUiOiJBbm90aGVyIGF0dGVtcHQifSx7ImlkIjoibUFLa0hMSF9IWUxhd2dzaE9ldElaIiwiY29kZSI6ImNvbnN0IHsgd3NzIH0gPSBEQVRBO1xuXG5jb25zdCBhZGRyZXNzZXNTZXQgPSBuZXcgU2V0KCk7XG5mb3IgKGNvbnN0IHdzIG9mIHdzcy5jbGllbnRzKSB7XG4gIGNvbnN0IHsgYWRkcmVzc2VzIH0gPSB3cy5hZGRyZXNzZXM7XG4gIGNvbnN0IHsgbGVuZ3RoIH0gPSBhZGRyZXNzZXNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSBhZGRyZXNzZXNTZXQuYWRkKGFkZHJlc3Nlc1tpXSk7XG59XG5jb25zdCBhZGRyZXNzZXMgPSBbLi4uYWRkcmVzc2VzU2V0XTsiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiRXZlbiBiZXR0ZXIifSx7ImlkIjoiTFcyTGJEaVBBT3AtMlNFZVVoSFJFIiwiY29kZSI6ImNvbnN0IHsgd3NzIH0gPSBEQVRBO1xuXG5jb25zdCBhZGRyZXNzZXNNYXAgPSB7fTtcbmZvciAoY29uc3Qgd3Mgb2Ygd3NzLmNsaWVudHMpXG4gIGZvciAoY29uc3QgYWRkcmVzcyBvZiB3cy5hZGRyZXNzZXMpXG4gICAgYWRkcmVzc2VzTWFwW2FkZHJlc3NdID0gdHJ1ZTtcbmNvbnN0IGFkZHJlc3NlcyA9IE9iamVjdC5rZXlzKGFkZHJlc3Nlc01hcCk7IiwiZGVwZW5kZW5jaWVzIjpbXSwibmFtZSI6Ik9iamVjdCAxIn0seyJpZCI6Im9LMm5IQ3JJTzg2bFl2TmwyMGprbyIsImNvZGUiOiJjb25zdCB7IHdzcyB9ID0gREFUQTtcblxuY29uc3QgYWRkcmVzc2VzTWFwID0ge307XG5cbmZvciAoY29uc3Qgd3Mgb2Ygd3NzLmNsaWVudHMpIHtcbiAgY29uc3QgYWRkcmVzc2VzID0gd3MuYWRkcmVzc2VzO1xuICBmb3IgKGxldCBhTGVuID0gYWRkcmVzc2VzLmxlbmd0aDsgYUxlbi0tOylcbiAgICBhZGRyZXNzZXNNYXBbYWRkcmVzc2VzW2FMZW5dXSA9IHRydWU7XG59XG4gIFxuY29uc3QgYWRkcmVzc2VzID0gT2JqZWN0LmtleXMoYWRkcmVzc2VzTWFwKTsiLCJkZXBlbmRlbmNpZXMiOltdLCJuYW1lIjoiT2JqZWN0IDIifSx7ImlkIjoiT0p0TklnRVBvb3BoaDNoVHdhQktHIiwiY29kZSI6ImNvbnN0IHsgd3NzIH0gPSBEQVRBO1xuXG5jb25zdCBhZGRyZXNzZXNNYXAgPSB7fTtcblxuZm9yIChjb25zdCB3cyBvZiB3c3MuY2xpZW50cylcbiAgZm9yIChjb25zdCBhZGRyZXNzIG9mIHdzLmFkZHJlc3NlcylcbiAgICBhZGRyZXNzZXNNYXBbYWRkcmVzc10gPSB0cnVlO1xuICBcbmNvbnN0IGFkZHJlc3NlcyA9IE9iamVjdC5rZXlzKGFkZHJlc3Nlc01hcCk7IiwiZGVwZW5kZW5jaWVzIjpbXSwibmFtZSI6Ik9iamVjdCAzIn1dLCJjb25maWciOnsibmFtZSI6IkJhc2ljIGV4YW1wbGUiLCJwYXJhbGxlbCI6dHJ1ZSwiZ2xvYmFsVGVzdENvbmZpZyI6eyJkZXBlbmRlbmNpZXMiOlt7InVybCI6Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGZha2VyLWpzL2Zha2VyQDguMC4yLytlc20iLCJuYW1lIjoiRkFLRVIiLCJlc20iOnRydWV9XX0sImRhdGFDb2RlIjoiY29uc3QgeyB1dWlkIH0gPSBGQUtFUi5mYWtlci5zdHJpbmc7XG5jb25zdCBhZGRyZXNzZXMgPSBbXTtcbmNvbnN0IGNsaWVudHMgPSBbXTtcblxubGV0IGFJZHggPSAwO1xuXG4vLyBTaW11bGF0ZSAxMDAwIGNvbm5lY3RlZCBjbGllbnRzIHdpdGggMTAwIHN1YnNjcmliZWQgYWRkcmVzc2VzXG5mb3IobGV0IGNJZHg7IGNJZHggPCAxMDAwMDsgY0lkeCsrKSB7XG4gIGNvbnN0IHdzID0geyBhZGRyZXNzZXM6IFtdIH07XG5cbiAgLy8gU2ltdWxhdGUgMSUgb2YgdXNlcnMgaGF2ZSB0aGUgc2FtZSB3YWxsZXQgY29ubmVjdGVkIGZyb21cbiAgLy8gdHdvIGRpc3RpbmN0IExhY2UgaW5zdGFuY2VzXG4gIGlmKGNJZHggJiYgTWF0aC5yYW5kb20oKSA8IDAuMDEpXG4gICAgY2xpZW50cy5wdXNoKGNsaWVudHNbW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNsaWVudHMubGVndGgpXV0pO1xuICBlbHNlXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IDEwMDsgKytpKSB7XG4gICAgICAvLyBTaW11bGF0ZSAwLjElIG9mIGFkZHJlc3NlcyBpcyBzdWJzY3JpYmVkIGJ5IGRpc3RpbmN0IHVzZXJzXG4gICAgICAvLyBpLmUuIHNoYXJlZCB3YWxsZXRzXG4gICAgICBpZihjSWR4ICYmIE1hdGgucmFuZG9tKCkgPCAwLjAwMSlcbiAgICAgICAgd3MuYWRkcmVzc2VzLnB1c2goYWRkcmVzc2VzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFkZHJlc3Nlcy5sZWd0aCldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBBcGFydCBmcm9tIHRoZSBmaXhlZCBwcmVmaXhcbiAgICAgICAgLy8gYWRkcmVzc2VzIGFuZCB1dWlkcyBhcmUgbG9uZyBzZXF1ZW5jZXMgb2YgcmFuZG9tIGNoYXJhY3RlcnNcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IFwiYWRkcl9cIiArIHV1aWQoKTtcblxuICAgICAgICBhZGRyZXNzZXNbYUlkeCsrXSA9IGFkZHJlc3M7XG4gICAgICAgIHdzLmFkZHJlc3Nlcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgfVxuXG4gICAgICBjbGllbnRzLnB1c2god3MpO1xuICAgIH1cbn1cblxucmV0dXJuIHsgd3NzOiB7IGNsaWVudHM6IG5ldyBTZXQoY2xpZW50cykgfSB9OyJ9fQ
227+
for (const ws of this.wss.clients) {
228+
const addresses = ws.addresses;
229+
// eslint-disable-next-line space-in-parens
230+
for (let aLen = addresses.length; aLen--; ) addressesObj[addresses[aLen]] = true;
231+
}
232+
233+
const addresses = Object.keys(addressesObj) as Cardano.PaymentAddress[];
226234

227235
if (debugLog) this.logger.debug(`Transactions for notification ${notification} ${JSON.stringify(addresses)}`);
228236

0 commit comments

Comments
 (0)