Last active
June 6, 2018 06:02
-
-
Save havenwood/c4a9d527df030dfaab996d42f745600b to your computer and use it in GitHub Desktop.
benchmark for json, yajl and oj.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
~ ruby json_benchmark.rb | |
String to JSON | |
Warming up -------------------------------------- | |
Oj.dump 24.918k i/100ms | |
Yajl.dump 9.461k i/100ms | |
JSON.dump 24.797k i/100ms | |
MessagePack.dump 44.355k i/100ms | |
Calculating ------------------------------------- | |
Oj.dump 267.683k (± 3.4%) i/s - 1.346M in 5.032971s | |
Yajl.dump 98.929k (± 2.8%) i/s - 501.433k in 5.072850s | |
JSON.dump 267.699k (± 3.4%) i/s - 1.339M in 5.008431s | |
MessagePack.dump 506.836k (± 3.1%) i/s - 2.573M in 5.080857s | |
Comparison: | |
MessagePack.dump: 506835.6 i/s | |
JSON.dump: 267699.2 i/s - 1.89x slower | |
Oj.dump: 267683.0 i/s - 1.89x slower | |
Yajl.dump: 98928.5 i/s - 5.12x slower | |
JSON to String | |
Warming up -------------------------------------- | |
Oj.load 6.843k i/100ms | |
Yajl.load 4.075k i/100ms | |
JSON.parse 4.739k i/100ms | |
MessagePack.load 9.835k i/100ms | |
Calculating ------------------------------------- | |
Oj.load 71.835k (± 2.6%) i/s - 362.679k in 5.052311s | |
Yajl.load 41.681k (± 2.5%) i/s - 211.900k in 5.087144s | |
JSON.parse 46.690k (± 4.9%) i/s - 236.950k in 5.087611s | |
MessagePack.load 100.421k (± 4.5%) i/s - 501.585k in 5.005654s | |
Comparison: | |
MessagePack.load: 100420.7 i/s | |
Oj.load: 71835.4 i/s - 1.40x slower | |
JSON.parse: 46690.3 i/s - 2.15x slower | |
Yajl.load: 41681.5 i/s - 2.41x slower |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'benchmark/ips' | |
require 'json' | |
require 'oj' | |
require 'yajl' | |
require 'msgpack' | |
HASH = {"audios_count"=>0, "audios_updated_at"=>nil, "avatar_content_type"=>nil, "avatar_file_name"=>nil, "avatar_file_size"=>nil, "avatar_updated_at"=>nil, "backend_id"=>nil, "cached_average_listen_span"=>0.0, "cached_followers_count"=>1, "cached_followings_count"=>1, "cached_likes_count"=>1, "city"=>nil, "country_code"=>nil, "country_name"=>nil, "cover_content_type"=>nil, "cover_file_name"=>nil, "cover_file_size"=>nil, "cover_updated_at"=>nil, "created_at"=>"Thu, 17 Jan 2013 08:49:20 UTC +00:00", "description"=>nil, "email"=>"test@gmail.com", "followers_updated_at"=>"Thu, 23 May 2013 09:19:19 UTC +00:00", "followings_updated_at"=>nil, "id"=>2, "links"=>nil, "loves_updated_at"=>"Wed, 15 May 2013 16:20:40 UTC +00:00", "name"=>"Liu Fengyun", "playlists_count"=>1, "playlists_updated_at"=>nil, "provider"=>"facebook", "role"=>nil, "slug"=>"liu-fengyun", "source"=>nil, "source_id"=>nil, "state_code"=>nil, "uid"=>"11111111", "unread_notifications_count"=>5, "updated_at"=>"Fri, 24 May 2013 07:32:16 UTC +00:00", :avatar=>{:large=>"//graph.facebook.com/11111111/picture?type=large", :normal=>"//graph.facebook.com/11111111/picture?type=normal", :small=>"//graph.facebook.com/11111111/picture?type=small"}, :slug=>"liu-fengyun", :cover=>"/covers/original/missing.png"} | |
puts 'String to JSON' | |
Benchmark.ips do |x| | |
hash = HASH | |
x.report('Oj.dump') { Oj.dump hash } | |
x.report('Yajl.dump') { Yajl.dump hash } | |
x.report('JSON.dump') { Oj.dump hash } | |
x.report('MessagePack.dump') { MessagePack.dump hash } | |
x.compare! | |
end | |
puts 'JSON to String' | |
Benchmark.ips do |x| | |
json = HASH.to_json | |
msgpack = HASH.to_msgpack | |
x.report('Oj.load') { Oj.load json } | |
x.report('Yajl.load') { Yajl.load json } | |
x.report('JSON.parse') { JSON.parse json } | |
x.report('MessagePack.load') { MessagePack.load msgpack } | |
x.compare! | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment