Skip to content

CB-5703 refactor: optimize data grid onScroll handler#3071

Merged
Wroud merged 2 commits intodevelfrom
CB-5703-data-editor-performance
Nov 21, 2024
Merged

CB-5703 refactor: optimize data grid onScroll handler#3071
Wroud merged 2 commits intodevelfrom
CB-5703-data-editor-performance

Conversation

@SychevAndrey
Copy link
Copy Markdown
Contributor

handleScroll in DataGrid entails small performance degradation due to el.scrollTop, el.clientHeight, el.scrollHeight calls and hence reflow of layout, more on that here: https://gist.github.com/paulirish/5d52fb081b3570c81e3a/565c05680b27c9cfd9f5e971d295cd558c3e1843

What is done:

  1. throttle added to not fire handleScroll on every render, because the main goal of that function is to detect when a user approaches the end of a page = reduce number of calls

  2. Inside the handler the code was refactored in a way that we get scrollTop only once to calculate toBottom and inverse the clause logic and replace early return (!A || !B) with a clause with (A && B) logic to not check B on every call which is also triggering reflow.

handleScroll in DataGrid entails small performance degradation due to el.scrollTop, el.clientHeight, el.scrollHeight calls and hence reflow of layout, more on that here: https://gist.github.com/paulirish/5d52fb081b3570c81e3a/565c05680b27c9cfd9f5e971d295cd558c3e1843

What is done:
1. throttle added to not fire handleScroll on every render, because the main goal of that function is to detect when a user approaches the end of a page = reduce number of calls

2. Inside the handler the code was  refactored in a way that we get scrollTop only once to calculate toBottom and inverse the clause logic and replace early return (!A || !B) with a clause with (A && B) logic to not check B on every call which is also triggering reflow.
@SychevAndrey SychevAndrey self-assigned this Nov 14, 2024
@Wroud Wroud merged commit 94aaf7b into devel Nov 21, 2024
@Wroud Wroud deleted the CB-5703-data-editor-performance branch November 21, 2024 13:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants