diff options
Diffstat (limited to 'lib/ffi_yajl/benchmark/parse_json_and_marshal.rb')
-rw-r--r-- | lib/ffi_yajl/benchmark/parse_json_and_marshal.rb | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/ffi_yajl/benchmark/parse_json_and_marshal.rb b/lib/ffi_yajl/benchmark/parse_json_and_marshal.rb new file mode 100644 index 0000000..06fe70b --- /dev/null +++ b/lib/ffi_yajl/benchmark/parse_json_and_marshal.rb @@ -0,0 +1,50 @@ +$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..') +$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib') + +require 'rubygems' +require 'benchmark' +require 'yajl' +begin + require 'json' +rescue LoadError +end + +# JSON section +filename = 'benchmark/subjects/ohai.json' +marshal_filename = 'benchmark/subjects/ohai.marshal_dump' +json = File.new(filename, 'r') +marshal_file = File.new(marshal_filename, 'r') + +hash = {} + +times = ARGV[0] ? ARGV[0].to_i : 1000 +puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n" +Benchmark.bmbm { |x| + x.report { + puts "Yajl::Parser#parse" + yajl = Yajl::Parser.new + yajl.on_parse_complete = lambda {|obj|} if times > 1 + times.times { + json.rewind + hash = yajl.parse(json) + } + } + if defined?(JSON) + x.report { + puts "JSON.parse" + times.times { + json.rewind + JSON.parse(json.read, :max_nesting => false) + } + } + end + x.report { + puts "Marshal.load" + times.times { + marshal_file.rewind + Marshal.load(marshal_file) + } + } +} +json.close +marshal_file.close
\ No newline at end of file |