EventHandle.off - performance improvements #7137
Merged
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.
No logic changes.
Since EventHandle was implemented, developer lives for events management have been simplified. At the same time there is a new opportunity for optimization. This PR does just that, when using EventHandle.off, instead of scanning callbacks and comparing
name
,callback
andscope
, now it uses EventHandle itself and checks if it is in array, if so, removes it.This leads to massive performance improvements when .off is called on EventHandle vs .off on EventHandler.
One of these cases is onDisable on RenderComponent (and similar components). On large scenes with a lot of render components
scene._callbacks['set:layers']
- becomes a very large array, the same applies toapp.layers._callbacks
.In some of our projects, disabling render components leads to a massive lag spike, in one specific project disabling big chunk of a scene takes ~3500ms, with this optimization time is reduces to ~900ms.
To benefit from this optimization, we need to use EventHandle within engine as much as possible, instead of a
off
on EventHandler's.PR's with EventHandle.off in critical places coming after this one.
I confirm I have read the contributing guidelines and signed the Contributor License Agreement.