Project

General

Profile

« Previous | Next » 

Revision 40724d7d

Added by watson1978 (Shizuo Fujita) over 4 years ago

[flori/json] Convert String encoding using rb_str_encode()

rb_funcall might be slightly heavy to call the Ruby method.
This patch will convert String encoding using rb_str_encode() instead of rb_funcall().

Before

$ ruby bench_json_generate.rb
Warming up --------------------------------------
                json    78.000  i/100ms
Calculating -------------------------------------
                json    789.781  (± 2.7%) i/s -      3.978k in   5.041043s

After

$ 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

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/9ae6d2969c