From 93ba0e64432edf46743f2f15cb6c1da3ba36dcf5 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 1 Dec 2021 11:40:59 +0100 Subject: [PATCH] Disable debug logs in production console.debug logs cause some performance issues because the browser is forced to save the logged objects just in case the user opens the debugging tools. They can be force-enabled back by adding ?debug=1 to the URL. Only console.debug is disabled, console.log and other levels are a lot less verbose and still enabled by default. --- README.md | 1 + components/app.js | 15 +++++++++++++++ lib/client.js | 9 +++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a617b91..3466a70 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ gamja settings can be overridden using URL query parameters: - `nick`: nickname - `channels`: comma-separated list of channels to join (`#` needs to be escaped) - `open`: [IRC URL] to open +- `debug`: if set to 1, debug mode is enabled Alternatively, the channels can be set with the URL fragment (ie, by just appending the channel name to the gamja URL). diff --git a/components/app.js b/components/app.js index fd16f6c..9d665e5 100644 --- a/components/app.js +++ b/components/app.js @@ -48,6 +48,15 @@ const configPromise = fetch("./config.json") const CHATHISTORY_MAX_SIZE = 4000; +function isProduction() { + // NODE_ENV is set by the Parcel build system + try { + return process.env.NODE_ENV === "production"; + } catch (err) { + return false; + } +} + function parseQueryString() { let query = window.location.search.substring(1); let params = {}; @@ -162,6 +171,7 @@ export default class App extends Component { memberList: false, }, }; + debug = !isProduction(); config = { ...baseConfig }; clients = new Map(); endOfHistory = new Map(); @@ -279,6 +289,9 @@ export default class App extends Component { if (typeof queryParams.open === "string") { this.autoOpenURL = irc.parseURL(queryParams.open); } + if (queryParams.debug === "1") { + this.debug = true; + } if (window.location.hash) { autojoin = window.location.hash.split(","); @@ -579,6 +592,8 @@ export default class App extends Component { this.setState({ connectParams: params }); let client = new Client(fillConnectParams(params)); + client.debug = this.debug; + this.clients.set(serverID, client); this.setServerState(serverID, { status: client.status }); diff --git a/lib/client.js b/lib/client.js index c4f1beb..5b471a5 100644 --- a/lib/client.js +++ b/lib/client.js @@ -76,6 +76,7 @@ export default class Client extends EventTarget { saslExternal: false, bouncerNetwork: null, }; + debug = false; batches = new Map(); autoReconnect = true; reconnectTimeoutID = null; @@ -225,7 +226,9 @@ export default class Client extends EventTarget { } let msg = irc.parseMessage(event.data); - console.debug("Received:", msg); + if (this.debug) { + console.debug("Received:", msg); + } // If the prefix is missing, assume it's coming from the server on the // other end of the connection @@ -653,7 +656,9 @@ export default class Client extends EventTarget { throw new Error("Failed to send IRC message " + msg.command + ": socket is closed"); } this.ws.send(irc.formatMessage(msg)); - console.debug("Sent:", msg); + if (this.debug) { + console.debug("Sent:", msg); + } } setCaseMapping(name) {