我有一个用ruby编写的应用程序(在JRuby VM中运行)。在对其进行分析时,我意识到它花了很多时间(实际上几乎全部)将一些哈希值转换为JSON
。
这些哈希值包含符号键,其他类似哈希值,数组,字符串和数字。
是否有适合此类输入的序列化方法,并且通常比JSON运行得更快?如果它也具有Java或JRuby兼容的gem,那将更可取。
我目前正在使用jruby-json
gem,这是JRuby中最快的JSON
实现(据我所知),所以此举很可能是针对不同的序列化方法,而不仅仅是不同的图书馆。
任何帮助表示赞赏!感谢。
答案 0 :(得分:6)
我刚刚在20分钟前听过这个项目(发布在黑客新闻上),它有一个Ruby实现:http://msgpack.sourceforge.net/#GettingStarted
MessagePack是一个基于二进制文件的高效对象序列化库。它可以在许多语言(如JSON)之间交换结构化对象。但与JSON不同,它非常快且小。
答案 1 :(得分:3)
我不知道JRuby的性能有多么不同,但在MRI中我认为Marshal
通常是最快的。
One article I found发现Marshal比JSON快3倍(这本身比YAML快一些),而another one引用了2x的差异(参见JSON的第一条评论)。 / p>
当然,这些都不能保证适合您的特定情况。你能用Benchmark
尝试每个选项吗?像这样:
require 'benchmark'
# other requires as necessary
N = 100 # or whatever multiple is needed to get a sensible result
Benchmark.bm(20) do |rpt|
rpt.report("YAML") do
N.times do
# perform your task using YAML
end
end
rpt.report("JSON") do
# as above for JSON
end
rpt.report("Marshal") do
# as above for JSON
end
end
答案 2 :(得分:3)