diff --git a/.jules/bolt.md b/.jules/bolt.md new file mode 100644 index 0000000000..ee26a18d5f --- /dev/null +++ b/.jules/bolt.md @@ -0,0 +1,3 @@ +## 2025-05-14 - Optimize outputDebug to skip expensive string construction +**Learning:** outputDebug always constructs a timestamped message even when debug logging is disabled. This involves calling `new Date().toISOString()` and string concatenation, which is wasteful in the hot path of logging. +**Action:** Add an early return in `outputDebug` using `shouldOutput('debug')` to skip work when not in verbose mode. diff --git a/packages/cli-kit/src/public/node/output.ts b/packages/cli-kit/src/public/node/output.ts index d1488702da..73670baa22 100644 --- a/packages/cli-kit/src/public/node/output.ts +++ b/packages/cli-kit/src/public/node/output.ts @@ -313,6 +313,8 @@ export function outputCompleted(content: OutputMessage, logger: Logger = console */ export function outputDebug(content: OutputMessage, logger: Logger = consoleWarn): void { if (isUnitTest()) collectLog('debug', content) + if (!shouldOutput('debug')) return + const message = colors.gray(stringifyMessage(content)) outputWhereAppropriate('debug', logger, `${new Date().toISOString()}: ${message}`) }