perf(cli): cache loadSettings to reduce redundant disk I/O at startup#21521
perf(cli): cache loadSettings to reduce redundant disk I/O at startup#21521
Conversation
|
Hi @sehoon38, thank you so much for your contribution to Gemini CLI! We really appreciate the time and effort you've put into this. We're making some updates to our contribution process to improve how we track and review changes. Please take a moment to review our recent discussion post: Improving Our Contribution Process & Introducing New Guidelines. Key Update: Starting January 26, 2026, the Gemini CLI project will require all pull requests to be associated with an existing issue. Any pull requests not linked to an issue by that date will be automatically closed. Thank you for your understanding and for being a part of our community! |
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request focuses on enhancing the performance of the CLI by introducing a caching layer for configuration loading. The primary goal is to minimize repetitive disk I/O operations and reduce the computational overhead associated with merging various configuration settings, thereby leading to a faster and more efficient startup experience for the command-line interface. Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request introduces an in-memory cache for loadSettings to improve startup performance by reducing disk I/O. The implementation correctly uses a cache with a 5-second TTL and invalidates it when settings are saved. The associated tests are well-written and cover the new caching logic. I have one suggestion to make the cache invalidation more granular for an even greater performance benefit, aligning with our caching guidelines.
|
Size Change: +336 B (0%) Total Size: 26 MB ℹ️ View Unchanged
|
641c20a to
dcb2389
Compare
dcb2389 to
d711107
Compare
scidomino
left a comment
There was a problem hiding this comment.
I'm worried that caching is not the right way to do this. There are a lot of processes that load the settings after modifying them and this would make it break if you try to do that twice within 30 seconds (like uninstalling and reinstalling an extension).
packages/cli/src/config/settings.ts
Outdated
| } | ||
|
|
||
| export function saveSettings(settingsFile: SettingsFile): void { | ||
| if (settingsFile.path === USER_SETTINGS_PATH) { |
There was a problem hiding this comment.
To keep things simple, we should just invalidate the entire cache every time. The extra complexity is not worth it.
Summary
This PR caches the results of
loadSettingsto reduce redundant disk I/O and configuration merging overhead during CLI startup and initialization.Details
loadSettingsinpackages/cli/src/config/settings.tsusing the corecreateCacheutility. This covers the burst of reads that happen natively when launching the CLI or executing a sub-process.saveSettingsnow clears the cache to ensure that changes take effect immediately.resetSettingsCacheForTesting()for test isolation.packages/cli/src/config/settings.test.ts.Related Issues
Fixes #17988
How to Validate
npm test -w @google/gemini-cli -- src/config/settings.test.tsPre-Merge Checklist