私はRuby on Railsのplistとしてオブジェクトの大きな(ish)配列をレンダリングしようとしています。コレクションには現在200個までのオブジェクトが含まれています。各オブジェクトは基本的にレコード(キー/値の辞書)です。全体の結果フォーマットはplist(Appleが使用しています)ですが、論理的にはXMLドキュメントとあまり変わりません。ruby/railsで大きなXMLコレクションをレンダリングする効率的な方法は何ですか?
私がヒットした問題は、アレイが200個のオブジェクトで約2秒かかってしまうことです。これは私にとっては非常に遅いようです。私は現在、このようなコードを使用しています。その後、クライアントに送信され
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...
など:
format.text {render :text => plistify(@entries)}
出力結果は以下のようになりますオーバーヘッドはルビの 'plistify'コードにあります - データベースのオーバーヘッドは比較して最小です。
オーバーヘッドが一時的なルビーオブジェクトをたくさん作成していると仮定して、私はこのすべてをビューに置き換えてみました。同じXMLドキュメントを作成するためにビューのBuilderを使用しました。 !
これを改善する方法や、ボトルネックを特定する方法については、
"to_plist"メソッドは何をしますか? –
to_plistメソッドはplist gemからのものです。自動的に指定されたハッシュを文字列形式のplist(つまり、qに表示されているXMLドキュメント形式)に変換します。 – frankodwyer