Performance of object (Array) encoding :#7
Merged
Conversation
Instead of a recursive approche for encoding/decoding which implies
multiple calls to escape/unescape for nested values and ever-growing
escaped strings use another scheme :
Encoding:
1. Walk the nested array as if flattend, encode each primitive value
(= non-array value) and escape them.
2. Prefix the item with a `K` for each array opened directly before it,
and suffix it with a `!` for each array closed directly after it
3. Join all items with a `"`
```javascript
encode(['a', [['b']]]) // KJa"KKJb!!!
```
Encoding is done in a single pass on all items of the nested array.
Decoding:
1. Split on `"`.
2. Walk the flat array, keeping track of opened/closed array (counting
prefix `K`s and suffix `!`s), and push the unescaped and decoded value
at the appropriate depth of the nestedarray
```javascript
decode('KJb"KJa!"KJb!!') // ['b',['a'],['b']]
```
Owner
|
this is great work! now both encoding and decoding is faster than bytewise. merging! |
Owner
|
merged into 3.0.0 |
Closed
This file contains hidden or 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
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.
Instead of a recursive approche for encoding/decoding which implies multiple calls to escape/unescape for nested values and ever-growing escaped strings, use another scheme
Encoding:
Kfor each array opened directly before it, and suffix it with a!for each array closed directly after it"Encoding is done in a single pass on all items of the nested array.
Decoding:
".Ks and suffix!s), and push the unescaped and decoded value at the appropriate depth of the nestedarrayDecoding is also done in a single pass on all items
I also reworked the benchmark to use
process.hrtime(more precise thanDate) and to allow benchmarking of deep nested array vs flat arrays.