Skip to content
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
wants to merge 22 commits into
base: master
Choose a base branch
from

Conversation

nitrey
Copy link

@nitrey nitrey commented May 22, 2020

  • 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:

  • init works 20% faster
  • object method's duration did not change
  • array lookup works 43% faster
  • dictionary lookup works 39% faster
  • raw string method is not affected
  • large dictionary lookup works 62% faster
  • dictionary lookup with long path works 52% faster

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.

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
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant