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

Ruby on rails 在ruby/rails中呈现大型XML集合的有效方法是什么?,ruby-on-rails,performance,xml-serialization,Ruby On Rails,Performance,Xml Serialization,我试图在RubyonRails中将一个大(ish)对象数组渲染为plist。该集合当前包含多达200个对象,每个对象本质上都是一个记录(键/值字典)。总体结果格式是plist(正如Apple所使用的),但从逻辑上讲,它与任何XML文档没有太大区别 我遇到的问题是,渲染200个对象的数组大约需要一秒钟的时间,这对我来说速度非常慢。我目前使用的代码如下: def plistify(collection) resultarray=Array.new() collection.eac

我试图在RubyonRails中将一个大(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
结果输出如下所示:

<?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...

条目

不知道如果不在plist gem本身进行黑客攻击,您是否可以做很多改进。看一下存储库中的源代码“svn checkout”,它看起来像是gem自己生成XML,而不是使用XML库(如LibXML、Nokogiri或builder)


我不确定使用这些库中的一个在生成XML方面会有多大的不同(它们在解析方面肯定更快),但它似乎是寻找优化机会的第一个合乎逻辑的地方。

什么是“to__\n列表”方法do?to_plist方法来自plist gem-它自动将给定的哈希转换为字符串形式的plist(即q中显示的XML文档格式)
<?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...