Lazy-load non-essential blueprints to improve desktop startup
维护者通常 2 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 38/100
- Issue 类型
- 重构
- 描述清晰度
- 需要澄清
- 活跃度
- 活跃
- 技术栈
- electron, python
调研方向
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.
由索引模型根据 Issue 内容生成。
描述
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
- 主要语言
- Python
- 星标
- 3.9k
- 派生
- 918
- 平均合并
- 2 天 12 小时
- 30 天内合并 PR
- 35
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
pgadmin-org/pgadmin4 的其他 Issue
-
Bug
难度 2/5 1-3 小时 新手友好度 78/100
pgadmin-org/pgadmin4#10673 ·
维护者通常 2 天内回复
-
Import/Export Data fails for a file name containing a backslash, and creates a stray file named E未关闭Bug
难度 2/5 1-3 小时 新手友好度 82/100
pgadmin-org/pgadmin4#10672 ·
维护者通常 2 天内回复
-
Feature
难度 2/5 1-3 小时 新手友好度 78/100
pgadmin-org/pgadmin4#10426 · 3 条评论 · 1 个 reaction ·
维护者通常 2 天内回复
-
Drag-n-drop file to sql editor tool don't clear previous content before adding the new content in windows可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭Feature
难度 2/5 1-3 小时 新手友好度 68/100
pgadmin-org/pgadmin4#10272 · 5 条评论 ·
维护者通常 2 天内回复
-
Housekeeping
难度 2/5 1-3 小时 新手友好度 76/100
pgadmin-org/pgadmin4#10157 · 1 条评论 ·
维护者通常 2 天内回复
查看 pgadmin-org/pgadmin4 的全部 Issue
相似的 Issue
-
channels:edit check:passed
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
aws-samples/sample-aws-genai-db-modernizer#2097 · 1 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 67/100
ietf-tools/datatracker#12027 ·
维护者通常 1 天内回复
-
[Bug]: Python SDK overwrites OVPack backups with HTTP 200 JSON errors可能已有人在做 @stefanielizeth73-art 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 76/100
volcengine/OpenViking#7347 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
deepset-ai/haystack-core-integrations#4228 ·
维护者通常 1 天内回复