Commit 9bef2bd
committed
Remove unnecessary initialization of create_id in JSON.parse()
The `create_id` has no effect if `create_additions` is false.
> * * *create_additions*: If set to false, the Parser doesn't create
> * additions even if a matching class and create_id was found. This option
> * defaults to false.
https://github.com/flori/json/blob/8f7ddba3cd343c2bada3c31c9660c63f0c6df114/ext/json/ext/parser/parser.c#L1758-L1760
So, this PR will remove initialization of `create_id` when `create_additions` is false.
This PR will improve JSON.parse() performance about 6%.
### Environment
- MacBook Pro (16-inch, 2019)
- macOS 11.1
- Intel Core i9 2.4 GHz
- Ruby 2.7.2
### Before
```
Warming up --------------------------------------
short_string_json 10.920k i/100ms
long_string_json 10.326k i/100ms
Calculating -------------------------------------
short_string_json 107.833k (± 1.1%) i/s - 546.000k in 5.064049s
long_string_json 103.035k (± 0.9%) i/s - 516.300k in 5.011344s
```
### After
```
Warming up --------------------------------------
short_string_json 11.654k i/100ms
long_string_json 11.021k i/100ms
Calculating -------------------------------------
short_string_json 115.564k (± 0.7%) i/s - 582.700k in 5.042516s
long_string_json 109.216k (± 0.6%) i/s - 551.050k in 5.045726s
```
### Test code
```ruby
require 'benchmark/ips'
require 'json'
short_string_json = {
"a" => "b" * 23,
"a" * 23 => "b"
}.to_json.freeze
long_string_json = {
"a" => "b" * 50,
"a" * 50 => "b"
}.to_json.freeze
Benchmark.ips do |x|
x.report("short_string_json") { JSON.parse(short_string_json) }
x.report("long_string_json") { JSON.parse(long_string_json) }
end
```1 parent 4423186 commit 9bef2bd
2 files changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2904 | 2904 | | |
2905 | 2905 | | |
2906 | 2906 | | |
2907 | | - | |
| 2907 | + | |
2908 | 2908 | | |
2909 | 2909 | | |
2910 | 2910 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
804 | 804 | | |
805 | 805 | | |
806 | 806 | | |
807 | | - | |
| 807 | + | |
808 | 808 | | |
809 | 809 | | |
810 | 810 | | |
| |||
0 commit comments