New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Performance refactoring #1063
Open
nitrey
wants to merge
22
commits into
SwiftyJSON:master
Choose a base branch
from
nitrey:SwiftyJSON/performance-refactoring
base: master
Could not load branches
Branch not found: {{ refName }}
Could not load tags
Nothing to show
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Performance refactoring #1063
nitrey
wants to merge
22
commits into
SwiftyJSON:master
from
nitrey:SwiftyJSON/performance-refactoring
Conversation
This file contains 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
roisg
added a commit
to WiskSolutions/SwiftyJSON
that referenced
this pull request
Dec 15, 2020
svenmuennich
added a commit
to pickware/SwiftyJSON
that referenced
this pull request
Jul 26, 2022
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.
What behaviour was changed?
In order to improve SwiftyJSON performance I've changed how underlying object of JSON is stored. Previously there were 6 non-optional properties: rawArray, rawDictionary, rawString, rawNumber, rawNull, rawBool. Initialising this properties for every single JSON is expensive. Instead of this properties, I suggest to use private
Content
enum that has cases with associated values for every JSON type option. As additional benefit, this approach improves the way underlying values are accessed and provides protection from type-value inconsistency.What code was refactored / updated to support this change?
I updated how content of JSON is stored, changed object property behaviour, collection conformance + minor changes.
Performance tests report that:
Checklist:
Does this have tests?
One additional test of dictionary lookup performance has been added. Every piece of updated logic is already tested.
Does this have documentation?
Documentation is provided for all new types / properties / functions.
Does this break the public API (Requires major version bump)?
One amazing thing about this update is that public API is not affected at all. What's more, JSON-related logic doesn't change, only implementation does.
Is this a new feature (Requires minor version bump)?
There are a lot of changes, version should be bumped.