-
-
Notifications
You must be signed in to change notification settings - Fork 3k
fix: prevent O(n²) memory allocation in content lookup map generation #14973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🦋 Changeset detectedLatest commit: b90634a The changes in this PR will be included in the next version bump. Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
I'm going to create a preview release so we can test if this change will provide benefits |
commit: |
CodSpeed Performance ReportMerging #14973 will not alter performanceComparing Summary
Footnotes |
|
Wonderful @amankumarpandeyin thank you! Do you have any anecdotal data, did this improve your build performance for example? |
@matthewp thanks! i was experiencing OOM errors with large content collections (10k+ entries)... after this change builds complete without memory issues... the fix eliminates the quadratic object copying that was causing 50M string copies for that scale |
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [astro](https://astro.build) ([source](https://github.com/withastro/astro/tree/HEAD/packages/astro)) | [`5.16.4` -> `5.16.5`](https://renovatebot.com/diffs/npm/astro/5.16.4/5.16.5) |  |  | --- ### Release Notes <details> <summary>withastro/astro (astro)</summary> ### [`v5.16.5`](https://github.com/withastro/astro/blob/HEAD/packages/astro/CHANGELOG.md#5165) [Compare Source](https://github.com/withastro/astro/compare/[email protected]@5.16.5) ##### Patch Changes - [#​14985](withastro/astro#14985) [`c016f10`](withastro/astro@c016f10) Thanks [@​florian-lefebvre](https://github.com/florian-lefebvre)! - Fixes a case where JSDoc annotations wouldn't show for fonts related APIs in the Astro config - [#​14973](withastro/astro#14973) [`ed7cc2f`](withastro/astro@ed7cc2f) Thanks [@​amankumarpandeyin](https://github.com/amankumarpandeyin)! - Fixes performance regression and OOM errors when building medium-sized blogs with many content entries. Replaced O(n²) object spread pattern with direct mutation in `generateLookupMap`. - [#​14958](withastro/astro#14958) [`70eb542`](withastro/astro@70eb542) Thanks [@​ascorbic](https://github.com/ascorbic)! - Gives a helpful error message if a user sets `output: "hybrid"` in their Astro config. The option was removed in Astro 5, but lots of content online still references it, and LLMs often suggest it. It's not always clear that the replacement is `output: "static"`, rather than `output: "server"`. This change adds a helpful error message to guide humans and robots. - [#​14901](withastro/astro#14901) [`ef53716`](withastro/astro@ef53716) Thanks [@​Darknab](https://github.com/Darknab)! - Updates the `glob()` loader to log a warning when duplicated IDs are detected - Updated dependencies \[[`d8305f8`](withastro/astro@d8305f8)]: - [@​astrojs/markdown-remark](https://github.com/astrojs/markdown-remark)@​6.3.10 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4zOS4yIiwidXBkYXRlZEluVmVyIjoiNDIuMzkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: Renovate Bot <[email protected]> Co-committed-by: Renovate Bot <[email protected]>
Changes
Fixes #14893
{...lookupMap[collection]?.entries, [key]: value}??=) and direct property assignment - O(n) complexityBefore:
After
Testing
All 1326 existing tests pass (3 unrelated failures: clipboard + network flakes)
All content-related tests pass: Content Collections, references, render(), Intellisense
Docs
No docs changes needed - this is an internal performance optimization with no API changes.