Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

fix(@angular/ssr): avoid retaining rendered HTML in memory post-request #31278

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

Merged
alan-agius4 merged 1 commit into angular:main from alan-agius4:fix-ssr-leak
Sep 23, 2025

Conversation

Copy link
Collaborator

@alan-agius4 alan-agius4 commented Sep 23, 2025

The previous implementation for server-side rendering could lead to memory leaks where the rendered HTML content was not properly garbage-collected after the HTTP request was fulfilled.

This was caused by inefficiencies in the critical CSS caching and how the response stream was handled. This commit addresses the issue by:

  1. Refactoring the criticalCssLRUCache to store Uint8Array directly and use a more robust caching strategy.
  2. Using the request URL as the cache key to prevent storing multiple cache entries for the same resource.
  3. Ensuring the response stream controller enqueues the final HTML as a Uint8Array, avoiding unnecessary string conversions and dangling references.

These changes prevent the SSR response from being retained in memory, improving the stability and performance of the server.

Closes #31277

ncamera reacted with hooray emoji
@alan-agius4 alan-agius4 marked this pull request as ready for review September 23, 2025 10:03
@alan-agius4 alan-agius4 added action: review The PR is still awaiting reviews from at least one requested reviewer target: patch This PR is targeted for the next patch release labels Sep 23, 2025
@alan-agius4 alan-agius4 force-pushed the fix-ssr-leak branch 2 times, most recently from 4f42a51 to 4386931 Compare September 23, 2025 10:22
The previous implementation for server-side rendering could lead to memory leaks where the rendered HTML content was not properly garbage-collected after the HTTP request was fulfilled.
This was caused by inefficiencies in the critical CSS caching and how the response stream was handled. This commit addresses the issue by:
1. Refactoring the `criticalCssLRUCache` to store `Uint8Array` directly and use a more robust caching strategy.
2. Using the request URL as the cache key to prevent storing multiple cache entries for the same resource.
3. Ensuring the response stream controller enqueues the final HTML as a `Uint8Array`, avoiding unnecessary string conversions and dangling references.
These changes prevent the SSR response from being retained in memory, improving the stability and performance of the server.
Closes angular#31277 
@alan-agius4 alan-agius4 added action: merge The PR is ready for merge by the caretaker and removed action: review The PR is still awaiting reviews from at least one requested reviewer labels Sep 23, 2025
@alan-agius4 alan-agius4 merged commit afa2738 into angular:main Sep 23, 2025
32 checks passed
@alan-agius4 alan-agius4 deleted the fix-ssr-leak branch September 23, 2025 16:51
Copy link
Collaborator Author

This PR was merged into the repository. The changes were merged into the following branches:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Reviewers

@jkrems jkrems jkrems approved these changes

Assignees
No one assigned
Labels
action: merge The PR is ready for merge by the caretaker area: @angular/ssr target: patch This PR is targeted for the next patch release
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

SSR rendered HTML is retained in memory after each request

AltStyle によって変換されたページ (->オリジナル) /