Skip to content

perf(@angular/build): key Sass package resolutions without containing URL qualification - #34069

Open
alan-agius4 wants to merge 1 commit into
angular:mainfrom
alan-agius4:perf/sass-package-cache-keying
Open

perf(@angular/build): key Sass package resolutions without containing URL qualification#34069
alan-agius4 wants to merge 1 commit into
angular:mainfrom
alan-agius4:perf/sass-package-cache-keying

Conversation

@alan-agius4

Copy link
Copy Markdown
Collaborator

PR Checklist

Please check to confirm your PR fulfills the following requirements:

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • Other... Please describe: Performance improvement

What is the current behavior?

Previously, only `pkg:` URLs were treated as package specifiers when constructing the Sass `resolutionCache` key. Bare package specifiers such as `@angular/material` or `@material/*` were qualified with the importing file's containing URL (`options.containingUrl`), resulting in a 0% cache hit rate across different component stylesheets. Additionally, `packageRootCache` was also unnecessarily qualified with the containing URL.

Issue Number: N/A

What is the new behavior?

Package specifiers (both `pkg:` and bare specifiers) are now detected via `isPackageUrl` and cached by specifier without containing URL qualification. Similarly, `packageRootCache` is keyed directly by `packageName`. This allows package resolutions and package roots to be properly shared across all component stylesheets.

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

@angular-robot angular-robot Bot added area: performance Issues related to performance area: @angular/build labels Sep 10, 2026
@alan-agius4 alan-agius4 added the target: minor This PR is targeted for the next minor release label Sep 10, 2026
@alan-agius4
alan-agius4 requested a review from clydin September 10, 2026 11:44
@alan-agius4 alan-agius4 added the action: review The PR is still awaiting reviews from at least one requested reviewer label Sep 10, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a new helper function isPackageUrl in sass-language.ts to identify package URLs, including pkg: schemes and bare specifiers, while excluding relative and absolute paths. The compileString function is updated to utilize this helper, enabling an early return when a URL is not a package and simplifying the cache key for currentPackageRootCache to use only the package name. Additionally, a comprehensive set of unit tests for isPackageUrl has been added in a new spec file. There are no review comments, and I have no feedback to provide.

… URL qualification

Previously, only pkg: URLs were treated as package specifiers when constructing the Sass resolutionCache key. Bare package specifiers such as @angular/material were qualified with the importing file's containing URL, resulting in cache misses across different component stylesheets. Additionally, packageRootCache was also unnecessarily qualified with the containing URL.

Package specifiers are now detected and cached without containing URL qualification, allowing package resolutions and package roots to be shared across all stylesheets.
@alan-agius4
alan-agius4 force-pushed the perf/sass-package-cache-keying branch from 2586ae8 to 365375f Compare September 10, 2026 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action: review The PR is still awaiting reviews from at least one requested reviewer area: @angular/build area: performance Issues related to performance target: minor This PR is targeted for the next minor release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant