-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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
fix: Improve Stack's style recalculation performance by selectively applying children selectors #25381
Conversation
…pplying children selectors.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice work!
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit 14382e2:
|
Asset size changes
Over Tolerance (1024 B) Over Baseline Below Baseline New Removed 1 kB = 1000 B Baseline commit: e80f15987f9ab7c3b1e569e60d8182bde09b1c99 (build) |
📊 Bundle size report🤖 This report was generated against e80f15987f9ab7c3b1e569e60d8182bde09b1c99 |
Perf Analysis (
|
Scenario | Render type | Master Ticks | PR Ticks | Iterations | Status |
---|---|---|---|---|---|
ThemeProvider | virtual-rerender-with-unmount | 2133 | 2160 | 5000 | Possible regression |
All results
Scenario | Render type | Master Ticks | PR Ticks | Iterations | Status |
---|---|---|---|---|---|
BaseButton | mount | 1183 | 1127 | 5000 | |
Breadcrumb | mount | 2910 | 2964 | 1000 | |
Checkbox | mount | 2583 | 2645 | 5000 | |
CheckboxBase | mount | 2344 | 2378 | 5000 | |
ChoiceGroup | mount | 4400 | 4357 | 5000 | |
ComboBox | mount | 1194 | 1255 | 1000 | |
CommandBar | mount | 9577 | 9363 | 1000 | |
ContextualMenu | mount | 11277 | 11353 | 1000 | |
DefaultButton | mount | 1372 | 1308 | 5000 | |
DetailsRow | mount | 3589 | 3562 | 5000 | |
DetailsRowFast | mount | 3604 | 3608 | 5000 | |
DetailsRowNoStyles | mount | 3413 | 3473 | 5000 | |
Dialog | mount | 3080 | 3079 | 1000 | |
DocumentCardTitle | mount | 583 | 578 | 1000 | |
Dropdown | mount | 3212 | 3229 | 5000 | |
FocusTrapZone | mount | 2018 | 2041 | 5000 | |
FocusZone | mount | 1985 | 1983 | 5000 | |
GroupedList | mount | 54337 | 59972 | 2 | |
GroupedList | virtual-rerender | 24806 | 24864 | 2 | |
GroupedList | virtual-rerender-with-unmount | 90317 | 91875 | 2 | |
GroupedListV2 | mount | 535 | 553 | 2 | |
GroupedListV2 | virtual-rerender | 533 | 545 | 2 | |
GroupedListV2 | virtual-rerender-with-unmount | 537 | 529 | 2 | |
IconButton | mount | 1815 | 1845 | 5000 | |
Label | mount | 660 | 717 | 5000 | |
Layer | mount | 3987 | 4136 | 5000 | |
Link | mount | 778 | 794 | 5000 | |
MenuButton | mount | 1586 | 1656 | 5000 | |
MessageBar | mount | 2212 | 2187 | 5000 | |
Nav | mount | 3002 | 3058 | 1000 | |
OverflowSet | mount | 1266 | 1256 | 5000 | |
Panel | mount | 2496 | 2323 | 1000 | |
Persona | mount | 1259 | 1225 | 1000 | |
Pivot | mount | 1649 | 1616 | 1000 | |
PrimaryButton | mount | 1384 | 1365 | 5000 | |
Rating | mount | 6488 | 6498 | 5000 | |
SearchBox | mount | 1476 | 1391 | 5000 | |
Shimmer | mount | 2808 | 2632 | 5000 | |
Slider | mount | 1986 | 1965 | 5000 | |
SpinButton | mount | 4308 | 4266 | 5000 | |
Spinner | mount | 781 | 754 | 5000 | |
SplitButton | mount | 2962 | 2931 | 5000 | |
Stack | mount | 853 | 773 | 5000 | |
StackWithIntrinsicChildren | mount | 2298 | 2250 | 5000 | |
StackWithTextChildren | mount | 4676 | 4695 | 5000 | |
SwatchColorPicker | mount | 9955 | 10257 | 5000 | |
TagPicker | mount | 2473 | 2415 | 5000 | |
TeachingBubble | mount | 86826 | 87235 | 5000 | |
Text | mount | 773 | 769 | 5000 | |
TextField | mount | 1606 | 1589 | 5000 | |
ThemeProvider | mount | 1476 | 1523 | 5000 | |
ThemeProvider | virtual-rerender | 1074 | 1076 | 5000 | |
ThemeProvider | virtual-rerender-with-unmount | 2133 | 2160 | 5000 | Possible regression |
Toggle | mount | 1098 | 1119 | 5000 | |
buttonNative | mount | 495 | 544 | 5000 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* master: (21 commits) fix(react-tabster): make acceptCondition optional as Tabster dont require it (microsoft#25416) chore: adds disableButtonEnhancement on triggers (microsoft#25211) applying package updates feat: Add support for the wbtx whiteboard file extension (microsoft#25346) chore(react-select): migrate to new package structure (microsoft#25359) chore(react-divider): migrate to new package structure (microsoft#25360) fix(docsite): codesandbox exports now working properly for newly migrated v9 packages (microsoft#25388) Website: fix focus border on UHF footer links (microsoft#25389) applying package updates feat: re-export react-table logic hooks (microsoft#25386) chore(react-aria): migrate to new package structure (microsoft#25199) chore(babel-preset-global-context): migrate to new package structure (microsoft#25340) applying package updates fix: Improve Stack's style recalculation performance by selectively applying children selectors (microsoft#25381) applying package updates fix(projects-test): explicitly install next version 12 to fix CI (microsoft#25374) allow details element to be toggled inside selection and focus zones (microsoft#25324) fix(react-persona): Changing persona's versions to pinned versions (microsoft#25367) update fast element and foundation package versions stable (microsoft#25364) chore(keyboard-keys, priority-overflow, react-context-selector, react-conformance-griffel): migrate to new package structure (microsoft#25362) ...
…pplying children selectors (microsoft#25381) * fix: Improve Stack's style recalculation performance by selectively applying children selectors. * Adding change file. Co-authored-by: Humberto Makoto Morimoto Burgos <[email protected]>
Previous Behavior
The
Stack
component applied children selectors independently of if they really needed to be applied or not. These selectors are expensive for style recalculation and are major contributors for slowdown in that step.Here are the results of a trace running on our v8 docsite's
Stack
page, where most of the most expensive selectors areStack
-related:New Behavior
The
Stack
component now applies most children selectors only when the props indicate they are needed to be applied, which should create better style recalculation performance depending on the props passed in.Here are the results of a trace running on our v8 docsite's
Stack
page after the change:This PR also removes the usage of the
selectors
keyword inStack.styles.ts
since that is not needed anymore and removing them should help with bundle size.Related Issue(s)
Fixes part of #24259