pgadmin-org / pgadmin-org/pgadmin4
Lazy-load non-essential blueprints to improve desktop startup
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 3.8k
- Forks
- 891
- Avg merge
- 4d 7h
- Merged PRs (30d)
- 8
Description
Problem
Some blueprints are imported during create_app() even though they are not required for desktop startup (SERVER_MODE=False). If we only import essential blueprints on startup and lazy load the other this would definetly result in faster load times.
After tracing the startup flow here is a breakdown of the blureprints and how we should ideally load them:
Modules that should remain eagerly loaded
| Module | Reason |
|---|---|
misc |
Provides the /misc/ping endpoint that Electron polls while waiting for the backend to start. Without it, the application never gets past the splash screen. |
browser |
Hasindex(), the first page Electron loads after startup. Deferring it only shifts the wait from the splash screen to a blank window. preferences also depends on it. |
Core authenticate |
Required for session and login handling, even in desktop mode. |
Good lazy-loading candidates
| Module | Load when | Reason | Approx. size |
|---|---|---|---|
authenticate (kerberos, ldap, mfa, oauth2, webserver) |
Never in desktop mode | Gate imports in authenticate/registry.py behind config.SERVER_MODE. Desktop runs with SERVER_MODE=False and doesn't use these providers. |
~14 files |
tools |
First tool opens | Query Tool, Debugger, Backup/Restore, ERD, Import/Export, etc. aren't needed during startup. | ~155 files |
llm |
AI assistant opened | Depends on pgadmin.tools.user_management, so it would likely move together with tools. |
~32 files |
dashboard |
First server/database opened | The dashboard isn't shown until after a connection is opened. | ~7 files |
Note: Considering how often tools are used, we can keep the tools blueprint in the early-loading category for a few select tools.
Not worth lazy-loading
These modules are tiny (1–4 files each):
preferencessettingsabouthelpredirects
Estimated impact
Potentially removes eager imports for roughly:
toolsllm- External authentication backends
≈ 190 of ~915 Python files
File count is only a rough proxy and not an estimate of startup improvement.
Validation
Profile import costs:
python -X importtime -c "from pgadmin.tools import blueprint"
python -X importtime -c "from pgadmin.llm import blueprint"
python -X importtime -c "from pgadmin.authenticate.registry import AuthSourceRegistry"
Then compare against overall create_app() startup time.
Proposal
- Gate external auth provider imports behind
config.SERVER_MODE. - Lazy-load
toolson first use. - Lazy-load
llmtogether withtools. - Optionally lazy-load
dashboardif it can be done cleanly.
I would be happy to start from the authenticate change since it's small and self-contained.
This is not a concrete implementation proposal, but rather a summary of observations from tracing the desktop startup flow and a few areas that might be worth exploring. I have not profiled import times yet but plan to do so shortly, so these suggestions are based on the current startup path and module dependencies rather than measured performance. However, I will shortly run the performance tests and provide details as a follow-up to this issue.
I would also appreciate some guidance on whether these are the right areas to target, or if there is a better approach I'm overlooking.
Thanks
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing create_app() and running the three python -X importtime commands listed in the issue, then compare those results with overall startup time. Review authenticate/registry.py and the blueprint loading paths for tools, llm, and dashboard. Done means a measured, agreed scope for lazy loading that preserves the essential desktop startup flow.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- electron, python
- Domain
- backend, desktop-dev, performance
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 38/100