Extract setState queuing into a service, re-use it in EuiIcon #2565
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
For performance reasons, EuiDataGrid utilizes
react-dom::unstable_batchedUpdates
to ensure setState calls are batched. EuiIcon suffers from not doing the same thing, which this PR resolves.Shown in the screen shots below, the current performance is a 1.6s second UI-blocking back-to-back sequence of icon updates. The batched performance shows multiple frame renders and one consolidated React update operation.
I also added an
onIconLoad
prop to simplify the testing experience, as icon tests must now wait for the queued setState to finish in addition to the dynamic import resolving.Current EuiIcon performance (icon docs page)
With batching
Checklist
- [ ] Checked in dark mode- [ ] Checked in mobile- [ ] Checked in IE11 and Firefox- [ ] Added documentation examples- [ ] Checked for accessibility including keyboard-only and screenreader modes