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.
Closes #2720
This takes a similar but slightly different approach to the linked PR.
The frameloop was originally a very small standalone library (and could be again?) so there's a focus on filesize where performance isn't really affected.
As the
.reduce
was the smallest implementation and is only called twice, this was chosen here.The linked PR introduces a hoisted
runNextFrame
which is a good idea, probably the source of the "hot" function so makes sense to define it just once.Here I've taken the linked PR's idea of unrolling the render steps but, instead of doing it in performance-insensitive areas where there's that trade of bundlesize, doing in the render loop itself which runs every frame and is highly performance sensitive.
Finally I've taken the linked PR's approach of replacing the
forEach
in thecancel
function with afor
loop, removing a function assignment. It should be thatcancel
is performed quite infrequently but it's also true that you never know.