我试图在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的plistiy代码中-相比之下,数据库开销是最小的。
假设开销可能来自于创建大量的临时ruby对象,我已经尝试用一个视图替换所有这些,并在视图中使用一个构建器来创建相同的XML文档-它可以工作,但实际上是速度的两倍!
有什么想法可以改进这一点,或者找出瓶颈?