perf(proxy): parallelize provider proxy overlay lookups - #2984
diegosouzapw merged 1 commit into
Conversation
There was a problem hiding this comment.
Code Review
This pull request refactors the proxy retrieval logic in src/app/api/settings/proxy/route.ts to fetch proxy configurations in parallel using Promise.all instead of sequentially. The reviewer suggested a further optimization to deduplicate proxy lookups by extracting unique proxyIds before querying, which would prevent redundant database queries when multiple assignments share the same proxy.
| const providerProxyResults = await Promise.all( | ||
| providerAssignments.map(async (assignment) => { | ||
| if (!assignment.scopeId || !assignment.proxyId) { | ||
| return null; | ||
| } | ||
| const proxyData = await getProxyById(assignment.proxyId, { includeSecrets: true }); | ||
| if (!proxyData) return null; | ||
| return { scopeId: assignment.scopeId, proxyData }; | ||
| }) | ||
| ); | ||
|
|
||
| for (const result of providerProxyResults) { | ||
| if (!result) continue; | ||
| config.providers[result.scopeId] = { | ||
| type: result.proxyData.type, | ||
| host: result.proxyData.host, | ||
| port: result.proxyData.port, | ||
| username: result.proxyData.username, | ||
| password: result.proxyData.password, | ||
| }; | ||
| } |
There was a problem hiding this comment.
Optimization: Deduplicate Proxy Lookups
If multiple provider assignments share the same proxy (which is a very common configuration), the current implementation will perform redundant database queries for the same proxyId.
We can optimize this by:
- Filtering the assignments to find valid ones.
- Extracting the unique
proxyIds. - Fetching only the unique proxies in parallel.
- Mapping them back to the providers.
This reduces the number of database queries and event loop microtasks.
const validAssignments = providerAssignments.filter(
(assignment) => assignment.scopeId && assignment.proxyId
);
const uniqueProxyIds = Array.from(
new Set(validAssignments.map((assignment) => assignment.proxyId as string))
);
const proxyDataResults = await Promise.all(
uniqueProxyIds.map(async (proxyId) => {
const proxyData = await getProxyById(proxyId, { includeSecrets: true });
return { proxyId, proxyData };
})
);
const proxyMap = new Map<string, NonNullable<typeof proxyDataResults[number]["proxyData"]>>();
for (const { proxyId, proxyData } of proxyDataResults) {
if (proxyData) {
proxyMap.set(proxyId, proxyData);
}
}
for (const assignment of validAssignments) {
const proxyData = proxyMap.get(assignment.proxyId!);
if (!proxyData) continue;
config.providers[assignment.scopeId!] = {
type: proxyData.type,
host: proxyData.host,
port: proxyData.port,
username: proxyData.username,
password: proxyData.password,
};
}…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (#2859/#3022/#3032), page redesigns (#2827/#2839/#2847/#2849/#2869/#2873), and fixes #2960/#2973/#2984/ #3021/#3029/#3031/#3035/#3036/#3037/#3039/#3043/#3028; folded #2978/#2988/#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
…der-proxy-overlay-lookups perf(proxy): parallelize provider proxy overlay lookups
…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (diegosouzapw#2859/diegosouzapw#3022/diegosouzapw#3032), page redesigns (diegosouzapw#2827/diegosouzapw#2839/diegosouzapw#2847/diegosouzapw#2849/diegosouzapw#2869/diegosouzapw#2873), and fixes diegosouzapw#2960/diegosouzapw#2973/diegosouzapw#2984/ diegosouzapw#3021/diegosouzapw#3029/diegosouzapw#3031/diegosouzapw#3035/diegosouzapw#3036/diegosouzapw#3037/diegosouzapw#3039/diegosouzapw#3043/diegosouzapw#3028; folded diegosouzapw#2978/diegosouzapw#2988/diegosouzapw#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
…der-proxy-overlay-lookups perf(proxy): parallelize provider proxy overlay lookups
…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (diegosouzapw#2859/diegosouzapw#3022/diegosouzapw#3032), page redesigns (diegosouzapw#2827/diegosouzapw#2839/diegosouzapw#2847/diegosouzapw#2849/diegosouzapw#2869/diegosouzapw#2873), and fixes diegosouzapw#2960/diegosouzapw#2973/diegosouzapw#2984/ diegosouzapw#3021/diegosouzapw#3029/diegosouzapw#3031/diegosouzapw#3035/diegosouzapw#3036/diegosouzapw#3037/diegosouzapw#3039/diegosouzapw#3043/diegosouzapw#3028; folded diegosouzapw#2978/diegosouzapw#2988/diegosouzapw#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
…der-proxy-overlay-lookups perf(proxy): parallelize provider proxy overlay lookups
…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (diegosouzapw#2859/diegosouzapw#3022/diegosouzapw#3032), page redesigns (diegosouzapw#2827/diegosouzapw#2839/diegosouzapw#2847/diegosouzapw#2849/diegosouzapw#2869/diegosouzapw#2873), and fixes diegosouzapw#2960/diegosouzapw#2973/diegosouzapw#2984/ diegosouzapw#3021/diegosouzapw#3029/diegosouzapw#3031/diegosouzapw#3035/diegosouzapw#3036/diegosouzapw#3037/diegosouzapw#3039/diegosouzapw#3043/diegosouzapw#3028; folded diegosouzapw#2978/diegosouzapw#2988/diegosouzapw#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
Summary
Follow-up to #2963, which was merged before this optimization commit landed.
This keeps the existing provider registry overlay behavior unchanged, but avoids resolving provider assignment proxy details sequentially. Provider assignment proxy lookups now run in parallel with
Promise.all, then successful results are applied toconfig.providers.Validation
npx eslint src/app/api/settings/proxy/route.tsnpx cross-env DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx --test --test-force-exit tests/unit/route-edge-coverage.test.tsResult: 15 pass, 0 fail.