🤖 Fix 7s startup delay by splitting tokenizer from renderer #166
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
The recent switch to
ai-tokenizer(commit 437127e) introduced a 7-8s startup delay in the renderer process due to eager loading of ~2MB tokenizer encoding files.Root Cause
Import chain pulling encodings into renderer:
Even though
CostsTab.tsxdoesn't use tokenization, it importssumUsageHistory()fromtokenStatsCalculator.ts, which has top-level tokenizer imports that eagerly load encoding data.Solution
Split usage aggregation logic into a new
usageAggregator.tsmodule with zero tokenizer dependencies.Changes
Created
src/utils/tokens/usageAggregator.tsChatUsageComponent,ChatUsageDisplaytypessumUsageHistory()functionUpdated
src/utils/tokens/tokenStatsCalculator.tscalculateTokenStats()Updated
src/components/ChatMetaSidebar/CostsTab.tsxtokenStatsCalculator→usageAggregatorUpdated
src/types/chatStats.tstokenStatsCalculator→usageAggregatorImpact
Architecture
Before:
After:
Tokenizer now stays in main process where it belongs, used by:
aiService.ts- AI request handlinghistoryService.ts- Chat history managementdebug/costs.ts- Debug commandsTesting
strings)CostsTabimports fromusageAggregator(fast path)sumUsageHistory()function tested and workingStats
Generated with
cmux