-
Notifications
You must be signed in to change notification settings - Fork 9.1k
fix: Add debounce to textarea component to improve performance #10345
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
base: master
Are you sure you want to change the base?
fix: Add debounce to textarea component to improve performance #10345
Conversation
Wrap the textarea component with DebounceInput to improve performance when modifying text in the body of a request
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.
Hi,
Thank you for the PR. I've suggested a change and provided couple of clarifications. Please have a look at it and let me know if my comments make sense.
src/core/components/layout-utils.jsx
Outdated
@@ -124,8 +125,7 @@ export class Button extends React.Component { | |||
|
|||
} | |||
|
|||
|
|||
export const TextArea = (props) => <textarea {...props} /> | |||
export const TextArea = (props) => <DebounceInput element="textarea" debounceTimeout={350} forceNotifyByEnter={false} {...props} /> |
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.
We have two options here - Introduce a new DebounceTextArea
along with already existing TextArea
or as a second option use DebounceInput
in ad-hoc basis.
IMHO first option is preferable, as we can reuse code that way.
export const DebounceTextArea = (props) => <DebounceInput element={TextArea} debounceTimeout={350} forceNotifyByEnter={false} {...props} />
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.
Additionally thank you for aligning with existing 350
ms debounce timeout which is consistent with the rest of the codebase.
forceNotifyByEnter={false}
seems idiomatic for debounced textareas as they allow editing multiline text.
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.
The default value for forceNotifyByEnter
is true
which I find a bit strange. I decided to set it to false
to prevent triggering the "bounce" when adding a new line with the 'enter key' for performance reason.
My spec file is 1.7MB (600+ requests with big models) and without this option the UI is laggy when adding new lines.
…textarea-for-performance
Description
Wrap the textarea component with DebounceInput to improve performance when modifying text in the body of a request
Motivation and Context
My project has 500+ requests and typing in the body is slow because changing the body re-render everything on the page.
A PR (#5882) was created a few years ago to correct issue #5850 however it was abandoned.
Fixes #5850
How Has This Been Tested?
Manual testing and ran all tests.
I had to modify a few tests to call
blur()
on the body to force the debounce to trigger. I would have expected the tests to work without having to callblur()
however I don't know enough about Cypress to know if this is normal.Screenshots (if appropriate):
N/A
Checklist
My PR contains...
src/
is unmodified: changes to documentation, CI, metadata, etc.)package.json
)My changes...
Documentation
Automated tests