Skip to content

feat(core): add ability to cache resources for SSR#68226

Open
JeanMeche wants to merge 1 commit intoangular:mainfrom
JeanMeche:resource-state-key
Open

feat(core): add ability to cache resources for SSR#68226
JeanMeche wants to merge 1 commit intoangular:mainfrom
JeanMeche:resource-state-key

Conversation

@JeanMeche
Copy link
Copy Markdown
Member

This commit adds a transferCacheKey option to enable easy caching for resource/ rxResource.

By caching resource data we make sure that resources are not in a loading state during hydration on the client side and responsible for destroying server hydrated DOM.

fixes #62897

This commit adds a `transferCacheKey` option to enable easy caching for `resource`/ `rxResource`.

By caching resource data we make sure that resources are not in a loading state during hydration on the client side and responsible for destroying server hydrated DOM.

fixes angular#62897
@pullapprove pullapprove bot requested review from AndrewKushnir and crisbeto April 15, 2026 21:32
@angular-robot angular-robot bot added detected: feature PR contains a feature commit area: core Issues related to the framework runtime labels Apr 15, 2026
@ngbot ngbot bot modified the milestone: Backlog Apr 15, 2026
equal?: ValueEqualityFn<T>;
injector?: Injector;
params?: (ctx: ResourceParamsContext) => R;
transferCacheKey?: (params: R) => StateKey<T>;
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copyied from a previous PR, @alan-agius4

  • Does this implementation result in duplicate transfer state entries (HTTP Client andResource)?
  • Consider id maybe instead of transferCacheKey?
  • Manual key management places a heavy burden on the developer to ensure global uniqueness. To improve the DX, we should explore internal ID generation instead of it being part of the API or something similar to React’s useId or Vue’s composition helpers. Relying on users to manual create unique cache-key feels like a "foot-gun" especially in big organizations; we should ideally handle key construction internally to prevent collisions, this was one of the reasons that we always avoided providing such option in the HTTP transfer cache.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this implementation result in duplicate transfer state entries (HTTP Client andResource)?

And rxResource that calls HttpClient wouldn't need to use the cache here (thx to #67382). It they enabled the caching here, it would indeed duplicate the transfer.

I agree that we should provide a util to generate unit Ids.

Copy link
Copy Markdown
Contributor

@thePunderWoman thePunderWoman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

reviewed-for: fw-general, public-api

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

Labels

area: core Issues related to the framework runtime detected: feature PR contains a feature commit

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Resource hasValue() is false for a moment when using TransferState cached data, causing hydration to fail

2 participants