Skip to content

Conversation

alan-agius4
Copy link
Collaborator

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

@alan-agius4 alan-agius4 requested a review from jkrems September 23, 2025 10:03
@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
@alan-agius4
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
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
Development

Successfully merging this pull request may close these issues.

SSR rendered HTML is retained in memory after each request
2 participants