Railsアプリに、読み込みに時間がかかりすぎる、派手な「ワークシート」スタイルのビューがあります。(開発モードでは、キャッシュがないことを知っています。「57893msで完了しました(表示:54975、DB:855)」)ワークシートはヘルパーメソッドを使用してレンダリングされます。ワークシートのさまざまな種類の行。今、パーシャルが実際に速いのではないかと思っていますか?
ページの読み込みをプロファイルし、オブジェクトのキャッシュが数秒短縮されるいくつかのケースを特定しましたが、プロファイルの出力は、ワークシートモデルの構成オブジェクトをループし、からの文字列出力を追加するだけで、かなりの時間が費やされることを示しています。ヘルパー。これが私が話していることの例です:
def header_row(wksht)
content_tag(:thead, :class => "ioe") do
content_tag(:tr) do
html_row = []
for i in (0...wksht.class::NUM_COLS) do
html_row << content_tag(:th, h(wksht.column_headings[i].upcase),
:class => wksht.column_classes[i])
end
html_row.join("\n")
end
end
end
パーシャルを使用するOTOHは、ファイルを開き、Rubyインタープリターをスピンオフし、長期的には、一連の文字列を集約することを意味します。だから私はヘルパーで物事をスピードアップする別の方法があるかどうか疑問に思っています。文字列ストリームのようなものを使用する必要がありますか(Rubyに存在しますか?)、独自の ""文字列補間を優先してcontent_tag呼び出しを削除する必要があります...独自のパフォーマンステストを作成し、共有します結果、私がすでに採用したアプローチの代替案があれば。
これはかなり複雑なビューであるため(編集可能なバージョンもあります)、全体を何度も書き直してプロファイルを作成することは避けたいと思います。:)
いくつかの関連する読書:
http://www.viget.com/extend/helpers-vs-partials-a-performance-question/(old)http://www.breakingpointsystems.com/community/blog/ruby-string-processing-overhead/
http _
_ ://blog.purepistos.net/index.php/2008/07/14/benchmarking-ruby-string-interpolation-concatenation-and-appending/
@tadman: 行の合計と列の合計(およびより多くの列の算術)があり、それらはすべて単なる合計ではなく、データベースの他の「マジックナンバー」にも依存するため、JavascriptではなくRubyコードで実装しました。(DRYおよびユニットテスト可能。)Javascriptは編集ビューでのみ使用され、行の追加/削除(クライアント側のみ)およびセルの内容が変更されたときに新しい合計を含むシートをフェッチするためにのみ使用されます。入力セルが変更されると値のほぼ半分が更新されるため、テーブル全体がフェッチされます。
ワークシートとその行は実際には仮想モデルです。それらはDBに存在しませんが、実際のARオブジェクトのボートロードを集約します。ビューがレンダリングされるたびに作成されます(ただし、開発モードでは1.7秒かかるため、心配する必要はありません)。
マークアップされたコンテンツではなく、数字のマトリックスを送信して、JSにシートにアンパックさせることができると思います。しかし、それはすぐに維持できなくなります。