繁体   English   中英

在ruby / rails中呈现大型XML集合的有效方法是什么?

[英]What is an efficient way to render a large XML collection in ruby/rails?

我正在尝试在Ruby on Rails中将大量(ish)对象呈现为plist。 该集合当前包含多达200个对象,每个对象本质上都是一条记录(键/值字典)。 总体结果格式是plist(Apple所使用的),但是从逻辑上讲,它与任何XML文档没有太大区别。

我遇到的问题是渲染数组大约需要200秒的时间,这对我来说似乎太慢了。 我目前正在使用这样的代码:

  def plistify(collection)
    resultarray=Array.new()
    collection.each do |entry|
      hash= entry.attributes
      hash["credits"]= entry.credits
      hash["ratingcount"]= entry.ratings.count
      hash["entryrating"]= entry.detail_rating
      hash["entryratingcount"]= entry.entryratingcount
      resultarray << hash
    end
    {'entries'=>resultarray}.to_plist
  end

然后使用以下命令将其发送给客户端:

format.text {render :text => plistify(@entries)}

结果输出如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>entries</key>
    <array> <-- corresponds to resultarray above
        <dict> <-- corresponds to a single entry's attributes above. one of these per entry.
            <key>cached_review_id</key>
            <integer>190</integer>
            <key>cached_tag_list</key>
            <string>pub restaurant food waitress</string>
            <key>created_at</key>
            <date>2009-05-31T13:47:10Z</date>
                    ...about 20 key/values...

等等。几乎所有开销都在ruby'plistify'代码中-通过比较,数据库开销很小。

假设开销可能来自创建许多临时的ruby对象,我尝试用视图替换所有这些,并在视图中使用Builder来创建相同的XML文档-它可以工作,但实际上慢两倍!

关于如何改善这一点的其他想法,或者找出瓶颈?

不知道您是否可以做很多事情来改善这一点,而不必担心plist gem本身。 在“ svn checkout http://plist.rubyforge.org/svn/ ”中查看存储库中的源代码,在这里看起来gem完全是自己生成XML的,而不是使用XML库(例如LibXML,Nokogiri或builder)。

我不确定使用这些库中的一个为您生成XML(它们解析速度肯定更快)有什么不同,但是这似乎是寻找优化机会的第一个逻辑位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM