-
Notifications
You must be signed in to change notification settings - Fork 842
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
[EuiResizeObserver] Remove reflow/getBoundingClientRect()
usage on resize
#7575
Conversation
getBoundingClientRect()
usage from resize eventsgetBoundingClientRect()
usage on resize
// ResizeObserver's first call to the observation callback is scheduled in the future | ||
// so find the container's initial dimensions now | ||
const boundingRect = container.getBoundingClientRect(); | ||
setSize({ | ||
width: boundingRect.width, | ||
height: boundingRect.height, | ||
}); |
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.
I've opted to remove this one-off getBoundingClientRect()
call on mount because it appears to only have been added purely for EuiDataGrid (#2991 (review)) and to be completely frank, at this point EuiDataGrid has a lot more performance issues going on than a quick flash of unsized columns. The extra reflow/performance hit is, IMO, not worth it 🤷
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.
Is this still happening? I tried to reproduce this in the EUI docs but I had the same result on the feature branch and on production. (but maybe I'm missing some context on how to reproduce it).
In any case, I'm ok with removing it. We can keep an eye out if there will be issues raised because of it.
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.
I wasn't able to repro either but I wasn't trying super hard or analyzing frame by frame like Dave apparently was 😅 EuiDataGrid has changed a lot since then so def possible it either isn't an issue or simply isn't worth it anymore!
Preview staging links for this PR:
|
💚 Build Succeeded
History
|
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.
🦄 LGTM!
// ResizeObserver's first call to the observation callback is scheduled in the future | ||
// so find the container's initial dimensions now | ||
const boundingRect = container.getBoundingClientRect(); | ||
setSize({ | ||
width: boundingRect.width, | ||
height: boundingRect.height, | ||
}); |
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.
Is this still happening? I tried to reproduce this in the EUI docs but I had the same result on the feature branch and on production. (but maybe I'm missing some context on how to reproduce it).
In any case, I'm ok with removing it. We can keep an eye out if there will be issues raised because of it.
Thanks Lene! |
@mgadewoll I probably should have checked before merging ha, but just to confirm, when you review PRs do you also complete the QA steps in the PR description, or are you doing code review only? |
@cee-chen I do the code review and then I follow the QA steps. 👣 |
Perfection! Thanks! |
`v93.3.0`⏩ `v93.4.0` --- ## [`v93.4.0`](https://github.com/elastic/eui/releases/v93.4.0) - Added the following properties to `EuiButtonGroup`'s `options` configs: `toolTipContent`, `toolTipProps`, and `title`. These new properties allow wrapping buttons in `EuiToolTips`, and additionally customizing or disabling the native browser `title` tooltip. ([#7461](elastic/eui#7461)) - Enhanced `EuiResizeObserver` and `useResizeObserver`'s performance to not trigger page reflows on resize event ([#7575](elastic/eui#7575)) - Updated `EuiSuperUpdateButton` to support custom button text via an optional `children` prop ([#7576](elastic/eui#7576)) **Bug fixes** - Fixed `EuiFlyout` to not repeatedly remove/add a body class on resize ([#7462](elastic/eui#7462)) - Fixed `EuiToast` title text to wrap instead of overflowing out of the container ([#7568](elastic/eui#7568)) - Fixed a visual bug with `EuiHeaderBreadcrumbs` with popovers ([#7580](elastic/eui#7580)) **Deprecations** - Deprecated `euiPalettePositive` and `euiPaletteNegative` in favour of a more culturally inclusive `euiPaletteGreen` and `euiPaletteRed` ([#7570](elastic/eui#7570)) - Deprecated all charts theme exports in favor of `@elastic/charts` exports: ([#7572](elastic/eui#7572)) - Deprecated `EUI_CHARTS_THEME_<DARK|LIGHT>` in favor of `<DARK|LIGHT>_THEME` from `@elastic/charts`. ([#7572](elastic/eui#7572)) - Deprecated `EUI_SPARKLINE_THEME_PARTIAL` in favor of `useSparklineOverrides` theme from the kibana `charts` plugin `theme` service. **Accessibility** - Updated `EuiModal` to set an `aria-modal` attribute and a default `dialog` role ([#7564](elastic/eui#7564)) - Updated `EuiConfirmModal` to set a default `alertdialog` role ([#7564](elastic/eui#7564)) - Fixed `EuiModal` and `EuiConfirmModal` to properly trap Safari+VoiceOver's virtual cursor ([#7564](elastic/eui#7564))
Summary
See @davismcphee's comment in #7462 (comment):
This is definitely a refactor/perf improvement we want across the board in our resize observer (both component and hook), hence me opening this PR.
QA
General checklist
- [ ] If applicable, added the breaking change issue label (and filled out the breaking change checklist)