[英]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.