Avoid allocating functions and use at most one timer per interval in throttleLeadingAndTrailing#5476
Merged
dmarcos merged 1 commit intoaframevr:masterfrom Mar 18, 2024
Conversation
aae9b6c to
3449ca7
Compare
dmarcos
reviewed
Feb 27, 2024
dmarcos
reviewed
Feb 27, 2024
src/utils/index.js
Outdated
| }, minimumInterval - sinceLastTime); | ||
| // Inside minimum interval, create timer if needed. | ||
| if (typeof deferTimer === 'undefined') { | ||
| deferTimer = setTimeout(timerExpired, minimumInterval - sinceLastTime); |
Member
There was a problem hiding this comment.
can do a single line
deferTimer = deferTimer || setTimeout(timerExpired, minimumInterval - sinceLastTime);
…throttleLeadingAndTrailing
3449ca7 to
4c45497
Compare
Member
|
Thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description:
The implementation of
throttleLeadingAndTrailingwas very inefficient when many updates took place in short succession. Virtually all invocations would result in clearing a timer, allocating a new function and creating a new timer. This impacted both the performance and memory usage ofsetAttribute.Using the

performance/set-attributeandperformance/animation-set-attributebenchmarks showed a clear performance benefit (when congested) cutting the duration in half (~9.16µs/op -> ~4.04µs/op) and reduced memory consumption:Instead of allocating a new function for each timer, one is created in advance. In case calls take place within the
minimumIntervalonly one timer is created and re-used until it expires ensuring at most one timer per interval (if needed).Changes proposed: