From 7bf9810c484576d044afc51cc0e4def41ff34045 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sat, 17 Oct 2020 18:13:09 +0700 Subject: [PATCH] Run Bisq block parse in separate Worker Thread. --- backend/package-lock.json | 5 +++++ backend/package.json | 5 +++-- backend/src/api/bisq/bisq.ts | 8 +++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 79250fd0a..96ad03b1d 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -881,6 +881,11 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-worker-threads-pool": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/node-worker-threads-pool/-/node-worker-threads-pool-1.4.2.tgz", + "integrity": "sha512-jU4NKLJacA8nfoYz1Uey18z3gqDfR/CX3PEqlNagtbTR+08pFQiB/ZyvpdDRkvgBrYz5yFCStCQYX659YCqrkg==" + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", diff --git a/backend/package.json b/backend/package.json index 867dc0531..a6e703108 100644 --- a/backend/package.json +++ b/backend/package.json @@ -27,9 +27,10 @@ "dependencies": { "compression": "^1.7.4", "express": "^4.17.1", - "mysql2": "^1.6.1", - "request": "^2.88.2", "locutus": "^2.0.12", + "mysql2": "^1.6.1", + "node-worker-threads-pool": "^1.4.2", + "request": "^2.88.2", "ws": "^7.3.1" }, "devDependencies": { diff --git a/backend/src/api/bisq/bisq.ts b/backend/src/api/bisq/bisq.ts index 04a3557c1..4f657b7db 100644 --- a/backend/src/api/bisq/bisq.ts +++ b/backend/src/api/bisq/bisq.ts @@ -4,7 +4,9 @@ import * as request from 'request'; import { BisqBlocks, BisqBlock, BisqTransaction, BisqStats, BisqTrade } from './interfaces'; import { Common } from '../common'; import { Block } from '../../interfaces'; +import { StaticPool } from 'node-worker-threads-pool'; import logger from '../../logger'; + class Bisq { private static BLOCKS_JSON_FILE_PATH = '/all/blocks.json'; private latestBlockHeight = 0; @@ -24,6 +26,10 @@ class Bisq { private priceUpdateCallbackFunction: ((price: number) => void) | undefined; private topDirectoryWatcher: fs.FSWatcher | undefined; private subdirectoryWatcher: fs.FSWatcher | undefined; + private jsonParsePool = new StaticPool({ + size: 4, + task: (blob: string) => JSON.parse(blob), + }); constructor() {} @@ -237,7 +243,7 @@ class Bisq { const start = new Date().getTime(); if (cacheData && cacheData.length !== 0) { logger.debug('Processing Bisq data dump...'); - const data: BisqBlocks = JSON.parse(cacheData); + const data: BisqBlocks = await this.jsonParsePool.exec(cacheData); if (data.blocks && data.blocks.length !== this.blocks.length) { this.blocks = data.blocks.filter((block) => block.txs.length > 0); this.blocks.reverse();