From 2b6ca5ff668fd5517add6c9645151070edcd7605 Mon Sep 17 00:00:00 2001 From: Jesse Chan Date: Sat, 22 May 2021 21:14:59 +0800 Subject: [PATCH] API: ditch inefficient "TRANSFER_SUMMARY_DIFF_CHANGE", always full update TRANSFER_SUMMARY_DIFF_CHANGE is almost always full update: ``` [ {"op":"replace","path":"/downTotal","value":851320719382}, {"op":"replace","path":"/downRate","value":6139}, {"op":"replace","path":"/upTotal","value":1826972572184}, {"op":"replace","path":"/upRate","value":5480521} ] ``` which is generally less efficient than full object (TRANSFER_SUMMARY_FULL_UPDATE): ``` { "upRate":5430724, "upTotal":1827320521117, "downRate":6062, "downTotal":851321106383 } ``` --- client/src/javascript/actions/FloodActions.ts | 4 ---- client/src/javascript/stores/TransferDataStore.ts | 6 ------ server/middleware/clientActivityStream.ts | 10 +++------- server/services/historyService.ts | 10 +++------- shared/types/ServerEvents.ts | 1 - 5 files changed, 6 insertions(+), 25 deletions(-) diff --git a/client/src/javascript/actions/FloodActions.ts b/client/src/javascript/actions/FloodActions.ts index bba42690..e192a77c 100644 --- a/client/src/javascript/actions/FloodActions.ts +++ b/client/src/javascript/actions/FloodActions.ts @@ -56,10 +56,6 @@ const ServerEventHandlers: Record void> UIStore.satisfyDependency('torrent-taxonomy'); }, - TRANSFER_SUMMARY_DIFF_CHANGE: (event: unknown) => { - TransferDataStore.handleTransferSummaryDiffChange(JSON.parse((event as {data: string}).data)); - }, - TRANSFER_SUMMARY_FULL_UPDATE: (event: unknown) => { TransferDataStore.handleTransferSummaryFullUpdate(JSON.parse((event as {data: string}).data)); UIStore.satisfyDependency('transfer-data'); diff --git a/client/src/javascript/stores/TransferDataStore.ts b/client/src/javascript/stores/TransferDataStore.ts index 67eaee99..c52efb04 100644 --- a/client/src/javascript/stores/TransferDataStore.ts +++ b/client/src/javascript/stores/TransferDataStore.ts @@ -1,4 +1,3 @@ -import jsonpatch, {Operation} from 'fast-json-patch'; import {makeAutoObservable} from 'mobx'; import type {TransferDirection, TransferHistory, TransferSummary} from '@shared/types/TransferData'; @@ -45,11 +44,6 @@ class TransferDataStore { this.transferRates = transferData; } - handleTransferSummaryDiffChange(diff: Operation[]) { - jsonpatch.applyPatch(this.transferSummary, diff); - this.appendCurrentTransferRateToHistory(); - } - handleTransferSummaryFullUpdate(transferSummary: TransferSummary) { this.transferSummary = transferSummary; this.appendCurrentTransferRateToHistory(); diff --git a/server/middleware/clientActivityStream.ts b/server/middleware/clientActivityStream.ts index f0ad0e8d..af011d34 100644 --- a/server/middleware/clientActivityStream.ts +++ b/server/middleware/clientActivityStream.ts @@ -108,13 +108,9 @@ export default async (req: Request { - serverEvent.emit(id, 'TRANSFER_SUMMARY_DIFF_CHANGE', diff); - }, - ); + handleEvents(serviceInstances.historyService, 'TRANSFER_SUMMARY_FULL_UPDATE', ({id, summary}) => { + serverEvent.emit(id, 'TRANSFER_SUMMARY_FULL_UPDATE', summary); + }); // Notifications serverEvent.emit( diff --git a/server/services/historyService.ts b/server/services/historyService.ts index 062218d7..55a756fa 100644 --- a/server/services/historyService.ts +++ b/server/services/historyService.ts @@ -1,5 +1,3 @@ -import jsonpatch, {Operation} from 'fast-json-patch'; - import type {HistorySnapshot} from '@shared/constants/historySnapshotTypes'; import type {TransferHistory, TransferSummary} from '@shared/types/TransferData'; @@ -8,7 +6,7 @@ import config from '../../config'; import HistoryEra from '../models/HistoryEra'; interface HistoryServiceEvents { - TRANSFER_SUMMARY_DIFF_CHANGE: (payload: {id: number; diff: Operation[]}) => void; + TRANSFER_SUMMARY_FULL_UPDATE: (payload: {id: number; summary: TransferSummary}) => void; FETCH_TRANSFER_SUMMARY_SUCCESS: () => void; FETCH_TRANSFER_SUMMARY_ERROR: () => void; } @@ -109,10 +107,8 @@ class HistoryService extends BaseService { } private handleFetchTransferSummarySuccess = async (nextTransferSummary: TransferSummary): Promise => { - const summaryDiff = jsonpatch.compare(this.transferSummary, nextTransferSummary); - - this.emit('TRANSFER_SUMMARY_DIFF_CHANGE', { - diff: summaryDiff, + this.emit('TRANSFER_SUMMARY_FULL_UPDATE', { + summary: nextTransferSummary, id: Date.now(), }); diff --git a/shared/types/ServerEvents.ts b/shared/types/ServerEvents.ts index d240f02d..703fa3e7 100644 --- a/shared/types/ServerEvents.ts +++ b/shared/types/ServerEvents.ts @@ -19,5 +19,4 @@ export interface ServerEvents { TORRENT_LIST_DIFF_CHANGE: Operation[]; TRANSFER_HISTORY_FULL_UPDATE: TransferHistory; TRANSFER_SUMMARY_FULL_UPDATE: TransferSummary; - TRANSFER_SUMMARY_DIFF_CHANGE: Operation[]; }