J'essaye de rendre un grand tableau (ish) d'objets comme un plist dans Ruby on Rails. La collection contient actuellement jusqu'à 200 objets, dont chacun est essentiellement un enregistrement (dictionnaire de clés/valeurs). Le format de résultat global est un plist (tel qu'utilisé par Apple) mais logiquement, il n'est pas très différent de tout document XML.Qu'est-ce qu'un moyen efficace de rendre une grande collection XML dans ruby / rails?
Le problème que j'ai rencontré est que le rendu du tableau prend environ une seconde avec 200 objets, ce qui me semble incroyablement lent. Je suis actuellement en utilisant le code comme ceci:
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
qui est ensuite envoyé au client en utilisant:
format.text {render :text => plistify(@entries)}
La sortie résultante ressemble à quelque chose comme:
<?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...
etc. Presque tous le surcoût est dans le code "plistify" de ruby - le surcoût de base de données est minime par comparaison. En supposant que la surcharge pourrait provenir de la création de nombreux objets ruby temporaires, j'ai essayé de remplacer tout ceci par une vue, et d'utiliser un Builder dans la vue pour créer le même document XML - ça marche mais il est deux fois plus lent !
Des idées pour améliorer ou identifier le goulot d'étranglement?
Que fait la méthode "to_plist"? –
la méthode to_plist provient de la gemme plist - elle convertit automatiquement le hachage donné en une forme de chaîne (c'est-à-dire le format de document XML affiché dans le q) – frankodwyer