簡體   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