-
-
Notifications
You must be signed in to change notification settings - Fork 834
bug: serializeShadowRoot: 'scoped' has a massive performance degradation. #6226
Description
Prerequisites
- I have read the Contributing Guidelines.
- I agree to follow the Code of Conduct.
- I have searched for existing issues that already report this problem, without success.
Stencil Version
4.27.1
Current Behavior
Currently, when using serializeShadowRoot: 'scoped' to SSR render, there is a huge degradation in terms of parsing speed of the CSS. A single component, with many css classes attached to it, is taking around 16s to render using serializeShadowRoot: 'scoped'. This seems to be growing linearly with the amount of unique components used, as well as the amount of CSS these components contain.
From some local testing, it seems that the biggest culprit here is how the CSS being parsed in styles.ts or shadow-css.ts. I know that in the past there was a refactoring in how things work when moving things away from "scoped" parsing, so perhaps something was lost when it was re-introduced recently by @johnjenkins?
Expected Behavior
The performance should be the same for both DSD and Scoped versions, similar to how things were in the past.
System Info
System: node 20.18.3
Platform: darwin (24.3.0)
CPU Model: Apple M1 Pro (8 cpus)
Compiler: stencil-bug-reproduction/node_modules/@stencil/core/compiler/stencil.js
Build: 1741890846
Stencil: 4.28.2 🎤
TypeScript: 5.5.4
Rollup: 4.34.9
Parse5: 7.2.1
jQuery: 4.0.0-pre
Terser: 5.37.0Steps to Reproduce
npm inpm run buildnpm run serveto spin up server- Visit
http://localhost:8090/ - Observe the time it takes to render.
- Remove component css classes, run
npm run build && npm run serveand notice that with fewer/no classes the performance improves.
Code Reproduction URL
https://github.com/Armand-Lluka/stencil-bug-reproductions/tree/renderToString-performance-example
Additional Information
No response