benchmark/encode.rb in yajl-ruby-0.8.1 vs benchmark/encode.rb in yajl-ruby-0.8.2

- old
+ new

@@ -8,52 +8,66 @@ require 'stringio' begin require 'json' rescue LoadError end -# Can't use ActiveSuport::JSON.encode with the JSON gem loaded -# begin -# require 'active_support' -# rescue LoadError -# end +begin + require 'psych' +rescue LoadError +end +begin + require 'active_support' +rescue LoadError +end filename = ARGV[0] || 'benchmark/subjects/ohai.json' -json = File.new(filename, 'r') -hash = Yajl::Parser.new.parse(json) -json.close +hash = File.open(filename, 'rb') { |f| Yajl::Parser.new.parse(f.read) } times = ARGV[1] ? ARGV[1].to_i : 1000 puts "Starting benchmark encoding #{filename} #{times} times\n\n" Benchmark.bmbm { |x| io_encoder = Yajl::Encoder.new - x.report { - puts "Yajl::Encoder#encode (to an IO)" + string_encoder = Yajl::Encoder.new + + x.report("Yajl::Encoder#encode (to an IO)") { times.times { io_encoder.encode(hash, StringIO.new) } } - string_encoder = Yajl::Encoder.new - x.report { - puts "Yajl::Encoder#encode (to a String)" + x.report("Yajl::Encoder#encode (to a String)") { times.times { output = string_encoder.encode(hash) } } if defined?(JSON) - x.report { - puts "JSON.generate" + x.report("JSON.generate") { times.times { JSON.generate(hash) } } end - # Can't use ActiveSuport::JSON.encode with the JSON gem loaded - # - # if defined?(ActiveSupport::JSON) - # x.report { - # puts "ActiveSupport::JSON.encode" - # times.times { - # ActiveSupport::JSON.encode(hash) - # } - # } - # end + if defined?(Psych) + x.report("Psych.to_json") { + times.times { + Psych.to_json(hash) + } + } + if defined?(Psych::JSON::Stream) + x.report("Psych::JSON::Stream") { + times.times { + io = StringIO.new + stream = Psych::JSON::Stream.new io + stream.start + stream.push hash + stream.finish + } + } + end + end + if defined?(ActiveSupport::JSON) + x.report("ActiveSupport::JSON.encode") { + times.times { + ActiveSupport::JSON.encode(hash) + } + } + end }