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

Use JsonReader for json parsing #572

Merged
merged 7 commits into from
Jan 9, 2018
Merged

Use JsonReader for json parsing #572

merged 7 commits into from
Jan 9, 2018

Conversation

gpeal
Copy link
Collaborator

@gpeal gpeal commented Dec 18, 2017

Previously, Lottie used JsonObject for deserialization. That meant that:

  1. Deserialization is not guaranteed to be O(n) where n is the size of the json file.
  2. The entire json string must be loaded into memory.

Switching to JsonReader has the following advantages:

  1. Reading is guaranteed to be O(n).
  2. Large files can be read in buffers.

However, deserialization code is much more cumbersome because you can't query for things like the existence of a key, the length of an array, and you can't re-walk the same part of the json multiple times.

@felipecsl Did some work (#137, #139, #145, #152) a year ago to prepare to decouple parsing logic so that people could use jackson or some other method of deserialization. However, JsonReader is now the most optimal solution so some of the factory code can be simplified in a future PR.

Performance

Most animations deserialize ~50% faster than before.
I was also able to deserialize a 50mb json file in 10s that couldn't come close to completing without OOMing before.

Animation Old time (ms) New time (ms) % improvement
Tadah 107 55 48%
Nudge 100 51 49%
Notifications 85 48 43%
Star Wars 74 41 45%
City 65 24 64%
9squares 17 7 59%
Empty State 9 4 56%
Hello World 6 2 66%
Hamburger Arrow 2 1 50%

Fixes #39

@gpeal gpeal force-pushed the gpeal--json-reader branch 4 times, most recently from 9810b4f to 7be0656 Compare January 4, 2018 01:02
@gpeal gpeal changed the title [WIP] Use JsonReader for json parsing Use JsonReader for json parsing Jan 4, 2018
@gpeal
Copy link
Collaborator Author

gpeal commented Jan 9, 2018

@gpeal gpeal merged commit 90242f6 into master Jan 9, 2018
@gpeal gpeal deleted the gpeal--json-reader branch January 9, 2018 20:45
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.

OutOfMemoryError when loading a ludicrously huge JSON animation on a Galaxy S3
1 participant