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
This pull requests replaces dynamicCasts (
as?
) with protocol method callsMotivation
In our company we heavily rely on SnapKit. So my team and I have investigated
SnapKit
performance in extremely-large apps. We discovered thatdynamicCasts
have significant performance impact onSnapKit
performance: about 5/6 of time taken byConstraint.init
(and its call-tree) is occupied bydynamic_cast_existential_1_conditional
. All measurements were made by opening the most important and visited screens in our iOS app.Before optimisations:
After optimisations:
Changes Made
Extended some protocols with new methods that are used to avoid using
as?
.Also, we've successfully avoided breaking ABI (at least in our project).
This Pull Request doesn't require to change call site:
ConstraintItem.init
isinternal
and I doubt that somebody has class or struct conforming toConstraintConstantTarget
,ConstraintDSL
,ConstraintRelatableTarget
orConstraintInsetTarget
.Testing Done
Please review this pull request and provide feedback. Thanks in advance!