mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[flori/json] Convert string encoding to UTF-8 only when needed
## Before ``` $ ruby bench_json_generate.rb Warming up -------------------------------------- json 129.000 i/100ms Calculating ------------------------------------- json 1.300k (± 2.3%) i/s - 6.579k in 5.064656s ``` ## After ``` $ ruby bench_json_generate.rb Warming up -------------------------------------- json 189.000 i/100ms Calculating ------------------------------------- json 1.964k (± 3.3%) i/s - 9.828k in 5.011237s ``` ## Code ``` require 'json' require 'benchmark/ips' obj = [] 1000.times do |i| obj << { "id" => i, :age => 42, } end Benchmark.ips do |x| x.report "json" do |iter| count = 0 while count < iter JSON.generate(obj) count += 1 end end end ``` https://github.com/flori/json/commit/c34d01ff6a
This commit is contained in:
parent
40724d7d10
commit
d7fa7e2c86
1 changed files with 3 additions and 1 deletions
|
@ -810,7 +810,9 @@ static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_S
|
|||
{
|
||||
fbuffer_append_char(buffer, '"');
|
||||
#ifdef HAVE_RUBY_ENCODING_H
|
||||
obj = rb_str_encode(obj, CEncoding_UTF_8, 0, Qnil);
|
||||
if (!rb_enc_str_asciicompat_p(obj)) {
|
||||
obj = rb_str_encode(obj, CEncoding_UTF_8, 0, Qnil);
|
||||
}
|
||||
#endif
|
||||
if (state->ascii_only) {
|
||||
convert_UTF8_to_JSON_ASCII(buffer, obj);
|
||||
|
|
Loading…
Reference in a new issue