rti/FastXml 或类似的东西可以与 Rails 3 配合使用来加速 xml 渲染吗?

发布于 2024-11-05 14:14:43 字数 641 浏览 1 评论 0原文

我们在 rails 3 中实现了一个 REST API,它使用 yajl 后端来处理 json。目前,当序列化超过 20 行时,它生成 json 响应的速度明显快于 xml

我的下一个想法是,rail 3 必须有一个类似的 C 库,它将使用 libxml 或类似的 to_xml,就像我们已经在使用的那样libyajlto_json

迄今为止,我只找到了 rti/FastXml 项目:https://github。 com/rti/FastXml
它声称是我想要的,但自 2010 年初以来就没有更新过,并且没有可见的分叉。

有谁知道FasterXml是否适用于rails 3

更重要的是,有谁知道任何其他方法可以让 Rails 3 进行更快的渲染:xml => @搜索结果?

非常感谢您的帮助。

We have a REST api implemented in rails 3, which is using the yajl back-end for json. It is currently generating json responses significantly faster than xml when serializing more than about 20 rows.

My next thought was that there must be a similar C-library drop-in for rail 3, which would use libxml or similar for to_xml, just as we're already using libyajl for to_json.

To date, I've found only the rti/FastXml project: https://github.com/rti/FastXml
It claims to be what I want, but hasn't been updated since early 2010, and has no visible forks.

Does anyone know if FasterXml works (or not) with rails 3?

More importantly, does anyone know any other ways to get rails 3 to do a faster render :xml => @search_results?

Many thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

长亭外,古道边 2024-11-12 14:14:43

通过 ab 测试一些 Rails 3 配置选项:XmlMini_LibXMLXmlMini_Nokogirifast_xs

以下请求以嵌套 ruby​​ 哈希的形式返回大约 50k 的搜索结果,数据来自 memcached,因此这里的时间差异在于将结果编码为 xml 或 json。

ab -n 100 -c 5 "http://DOMAIN/PATH.(xml|json)"

摘要:
添加 gem fast_xs 似乎可以将 XML 时间减少一半,其他则没有效果。

  1. JSON(yajl)

     最小值平均值[+/-sd] 中值最大值
    连接:0 1 2.7 0 20
    处理中:159 453 188.6 387 994
    等候电话:155 444 188.4 380 992
    总计:160 454 188.6 387 995
    
  2. XML(rails 3.0.3 默认值)

     最小值平均值[+/-sd] 中值最大值
    连接:0 1 2.6 0 10
    处理:377 1256 337.5 1260 2612
    等候电话:367 1233 335.7 1230 2597
    总计: 378 1258 337.3 1260 2613
    
  3. XML (XmlMini_LibXML)

     最小值平均值[+/-sd] 中值最大值
    连接:0 1 2.3 0 13
    处理:479 1217 233.8 1251 1830
    等候电话:473 1188 235.3 1229 1826
    总计: 479 1218 234.0 1252 1835
    
  4. XML (XmlMini_Nokogiri)

     最小值平均值[+/-sd] 中值最大值
    连接:0 1 1.8 0 10
    处理:701 1211 228.1 1259 1654
    等候电话:695 1197 224.8 1251 1650
    总计:701 1212 228.4 1261 1655
    
  5. XML(默认值 + fast_xs)

     最小值平均值[+/-sd] 中值最大值
    连接:0 1 1.9 0 10
    处理中:243 656 233.1 702 1288
    等候电话:238 627 236.7 585 1286
    总计:250 657 233.3 702 1289
    
  6. XML(XmlMini_LibXML + fast_xs)

     最小值平均值[+/-sd] 中值最大值
    连接:0 1 1.8 0 10
    处理:256 685 222.6 704 1138
    等候电话:234 650 229.5 661 1132
    总计:257 686 222.7 705 1138
    
  7. XML(XmlMini_Nokogiri + fast_xs)

     最小值平均值[+/-sd] 中值最大值
    连接:0 2 3.9 0 23
    处理:210 657 224.7 714 1118
    等候电话:206 610 229.9 607 1094
    总计:210 659 225.0 716 1119
    
  8. JSON(yajl + fast_xs)

     最小值平均值[+/-sd] 中值最大值
    连接:0 1 1.8 0 11
    处理中:153 442 197.1 396 1129
    等候电话:148 435 196.3 391 1124
    总计:153 442 197.3 398 1136
    

Tests of a few rails 3 config options, via ab: XmlMini_LibXML, XmlMini_Nokogiri, fast_xs.

The following request returns about 50k of search results in the form of nested ruby hashes, with the data coming from memcached, so that the time differences here are in encoding the results into xml or json.

ab -n 100 -c 5 "http://DOMAIN/PATH.(xml|json)"

SUMMARY:
Adding gem fast_xs appears to cut XML time in half, others have no effect.

  1. 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
    
  2. XML (rails 3.0.3 defaults)

                  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
    
  3. 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
    
  4. 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
    
  5. XML (defaults + 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
    
  6. 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
    
  7. 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
    
  8. 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
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文