From 7330ebf9f26bd4e8219ba78089bf9b496e418955 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Mon, 7 Feb 2022 15:28:01 +0100 Subject: [PATCH] Improve performance by limiting renders --- memory.ts | 29 ++++++++-------- sidebar/sidebar.tsx | 15 ++++----- sidebar/stolen-data-cluster.tsx | 59 +++++++++++++-------------------- sidebar/stolen-data.tsx | 18 +++------- stolen-data-entry.ts | 41 ++++++----------------- util.ts | 26 ++++++++++++--- 6 files changed, 79 insertions(+), 109 deletions(-) diff --git a/memory.ts b/memory.ts index 7b60311..500f5f7 100644 --- a/memory.ts +++ b/memory.ts @@ -5,7 +5,7 @@ import { RequestCluster } from './request-cluster'; export default class Memory extends EventEmitter { origin_to_history = {} as Record>; - private throttle = makeThrottle(200); + private throttle = makeThrottle(100); async register(request: ExtendedRequest) { await request.init(); if (!request.isThirdParty()) { @@ -20,7 +20,7 @@ export default class Memory extends EventEmitter { this.origin_to_history[request.origin][shorthost] = cluster; } this.origin_to_history[request.origin][shorthost].add(request); - this.emit('change'); + this.emit('change', false, shorthost, 'registered request(shorthost emit)'); } constructor() { @@ -35,9 +35,9 @@ export default class Memory extends EventEmitter { ); browser.webRequest.onBeforeSendHeaders.addListener( async (request) => { - const extendedRequest = ExtendedRequest.by_id[ - request.requestId - ].addHeaders(request.requestHeaders || []); + const extendedRequest = ExtendedRequest.by_id[request.requestId].addHeaders( + request.requestHeaders || [] + ); this.register(extendedRequest); }, { urls: [''] }, @@ -45,13 +45,16 @@ export default class Memory extends EventEmitter { ); } - emit(eventName: string, immediate = false) { + emit(eventName: string, immediate = false, data = 'any', reason: string) { + console.log('emitting!', eventName, data, reason); + setTimeout(() => super.emit(eventName, data), 0); + return; try { if (immediate) { - super.emit(eventName); + super.emit(eventName, data); return; } else { - this.throttle(() => super.emit(eventName)); + this.throttle(() => super.emit(eventName, data)); } return true; } catch (e) { @@ -68,12 +71,7 @@ export default class Memory extends EventEmitter { if (shorthost) { const cookies = await browser.cookies.getAll({ domain: shorthost }); for (const cookie of cookies) { - console.log( - 'removing cookie', - cookie.name, - 'from', - cookie.domain - ); + console.log('removing cookie', cookie.name, 'from', cookie.domain); await browser.cookies.remove({ name: cookie.name, url: `https://${cookie.domain}`, @@ -102,6 +100,5 @@ export function init() { } export function getMemory(): Memory { - return (browser.extension.getBackgroundPage().window as any) - .memory as Memory; + return (browser.extension.getBackgroundPage().window as any).memory as Memory; } diff --git a/sidebar/sidebar.tsx b/sidebar/sidebar.tsx index 592fa57..7c23595 100644 --- a/sidebar/sidebar.tsx +++ b/sidebar/sidebar.tsx @@ -2,7 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import Options from '../options'; import { StolenData } from './stolen-data'; -import { useEmitter } from '../util'; +import { getshorthost, useEmitter } from '../util'; import { getMemory } from '../memory'; async function getCurrentTab() { @@ -26,7 +26,7 @@ const Sidebar = () => { const [cookiesOnly, setCookiesOnly] = React.useState(false); const [stolenDataView, setStolenDataView] = React.useState(true); const [cookiesOrOriginOnly, setCookiesOrOriginOnly] = React.useState(false); - const [counter, setCounter] = useEmitter(getMemory()); + const [eventCounts, setEventCounts] = useEmitter(getMemory()); const [marksOccurrence, setMarksOccurrence] = React.useState(false); const [warningDataDialogAck, setWarningDataDialogAck] = React.useState( localStorage.getItem('warningDataDialogAck') === null @@ -44,7 +44,7 @@ const Sidebar = () => { ); React.useEffect(() => { - const listener = async (data: any) => { + const listener = async () => { console.log('tab change!'); const tab = await getCurrentTab(); const url = new URL(tab.url); @@ -66,7 +66,7 @@ const Sidebar = () => { } } return setMarksOccurrence(false); - }, [counter, origin]); + }, [eventCounts['*'], origin]); return (
@@ -112,7 +112,7 @@ const Sidebar = () => {