Работает ли rti / FastXml или что-то подобное с rails 3 для ускорения рендеринга xml? - PullRequest
0 голосов
/ 05 мая 2011

У нас есть REST API, реализованный в rails 3 , который использует yajl back-end для json.В настоящее время он генерирует json ответов значительно быстрее, чем xml при сериализации более 20 строк.

Моя следующая мысль состояла в том, что для рельса 3 должно быть подобное раскрывающееся содержимое библиотеки C, которое будет использовать libxml или подобное для to_xml, так же как мы уже используем libyajl дляto_json.

На сегодняшний день я нашел только проект rti / FastXml : https://github.com/rti/FastXml
Он претендует на то, что я хочу, но не был обновленс начала 2010 года и не имеет видимых вилок.

Кто-нибудь знает, работает ли FasterXml (или нет) с рельсами 3 ?

Более важноКто-нибудь знает какие-либо другие способы заставить рельсы 3 сделать быстрее render :xml => @search_results?

Большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 05 мая 2011

Тестирование нескольких рельсов 3 опции конфигурации, через ab: XmlMini_LibXML, XmlMini_Nokogiri, fast_xs.

Следующий запрос возвращает около 50 тыс. Результатов поиска в виде вложенного рубина.хэши, с данными, поступающими из memcached, так что разница во времени здесь заключается в кодировании результатов в xml или json.

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

РЕЗЮМЕ:
Добавление гем fast_xsпохоже, сокращает время XML пополам, другие не имеют никакого эффекта.

  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 (рельсы 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
    
  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 (по умолчанию + 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
    
...