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