-
Notifications
You must be signed in to change notification settings - Fork 805
bug: serializeShadowRoot: 'scoped' has a massive performance degradation. #6226
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
Comments
hey @Armand-Lluka - thanks for raising - I'll take a look when I can. Out of interest, did you use Stencil's old SSR: shadow > scoped > shadow behaviour with the same amount of styles etc? *edit - i've just tried your repro with stencil ~2 and it is indeed, very fast |
We are currently on version |
I think the scoped styling issue was fixed here #6224 ? Regarding this issue - I have a horrible feeling that previously, the scoped-styles were hard baked into the hydrated app output and now we’re doing it dynamically (I don’t know, just speculation). If that’s the case we may need to rethink the whole approach e.g decide on SSR method at build time |
It looks like the scoped styling issue was not fixed. I've updated the stencil version in the example to reflect that. |
It seems my assumptions are correct - Stencil is now doing this on the fly - before, it did it at build time < I guess rollup is much more efficient at doing text reading / manipulation than a node server. So I guess we (@christian-bromann) need to either decide whether to try and make that call more efficient somehow or change the api to make users choose 'declarative-shadow-dom' or 'scoped' at build time |
Raised a PR with a potential fix, please review |
Prerequisites
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 usingserializeShadowRoot: '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
orshadow-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
Steps to Reproduce
npm i
npm run build
npm run serve
to spin up serverhttp://localhost:8090/
npm run build && npm run serve
and 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
The text was updated successfully, but these errors were encountered: