我们在rails 3中实现了一个REST api,它使用yajl
后端进行json
。当前,当序列化超过 20 行时,它生成json
响应的速度明显快于xml
。
我的下一个想法是,轨道 3 必须有一个类似的 C 库插入,它将使用 libxml
或类似的 to_xml
,就像我们已经将 libyajl
用于to_json
一样。
到目前为止,我只找到了 rti/FastXml 项目:https://github.com/rti/FastXml
它声称是我想要的,但自 2010 年初以来一直没有更新,也没有可见的分叉。
有谁知道FasterXml是否适用于rails 3?
更重要的是,有谁知道任何其他方法可以让 rails 3 做更快的render :xml => @search_results
?
非常感谢任何帮助。
几个轨道的测试 3 个配置选项,通过ab
:XmlMini_LibXML
、XmlMini_Nokogiri
、fast_xs
。
以下请求以嵌套 ruby 哈希的形式返回大约 50k 个搜索结果,数据来自 memcached,因此这里的时差是将结果编码为 xml 或 json。
ab -n 100 -c 5 "http://DOMAIN/PATH.(xml|json)"
总结:
添加 gem fast_xs
似乎可以将 XML 时间缩短一半,其他方法则没有效果。
JSON (yajl)
min mean[+/-sd] median max Connect: 0 1 2.7 0 20 Processing: 159 453 188.6 387 994 Waiting: 155 444 188.4 380 992 Total: 160 454 188.6 387 995
XML(rails 3.0.3 默认值)
min mean[+/-sd] median max Connect: 0 1 2.6 0 10 Processing: 377 1256 337.5 1260 2612 Waiting: 367 1233 335.7 1230 2597 Total: 378 1258 337.3 1260 2613
XML (XmlMini_LibXML)
min mean[+/-sd] median max Connect: 0 1 2.3 0 13 Processing: 479 1217 233.8 1251 1830 Waiting: 473 1188 235.3 1229 1826 Total: 479 1218 234.0 1252 1835
XML (XmlMini_Nokogiri)
min mean[+/-sd] median max Connect: 0 1 1.8 0 10 Processing: 701 1211 228.1 1259 1654 Waiting: 695 1197 224.8 1251 1650 Total: 701 1212 228.4 1261 1655
XML(默认值 + fast_xs)
min mean[+/-sd] median max Connect: 0 1 1.9 0 10 Processing: 243 656 233.1 702 1288 Waiting: 238 627 236.7 585 1286 Total: 250 657 233.3 702 1289
XML (XmlMini_LibXML + fast_xs)
min mean[+/-sd] median max Connect: 0 1 1.8 0 10 Processing: 256 685 222.6 704 1138 Waiting: 234 650 229.5 661 1132 Total: 257 686 222.7 705 1138
XML (XmlMini_Nokogiri + fast_xs)
min mean[+/-sd] median max Connect: 0 2 3.9 0 23 Processing: 210 657 224.7 714 1118 Waiting: 206 610 229.9 607 1094 Total: 210 659 225.0 716 1119
JSON (yajl + fast_xs)
min mean[+/-sd] median max Connect: 0 1 1.8 0 11 Processing: 153 442 197.1 396 1129 Waiting: 148 435 196.3 391 1124 Total: 153 442 197.3 398 1136