1

Railscurrent_page?ヘルパー メソッドの効率性に興味があります。大まかに以下に示すように、ビューで使用しています。

  <% if current_page?(:action => "foo") %>
    <dt>Label 1:</dt>
  <% else %>
    <dt>Label 2:</dt>
  <% end %>

  <% if current_page?(:action => "foo") || current_page(:action => "bar") %>
    <dt>Label 1:</dt>
  <% else %>
    <dt>Label 2:</dt>
  <% end %>

しかし、この切り替えを別の方法で行う方が効率的でしょうか? たとえば、 と のコントローラー アクションでインスタンス変数を設定してfooからbar、 をチェックする方が効率的でしょ<% if @foo || @bar %>うか?

また、Rails 2 と Rails 3 で効率に違いはありますか?

4

1 に答える 1

1

Rails 2 と Rails 3 の違いについては語れませんが、 ActionPack のソース コードを見ると、メソッドが特に複雑なことをしているようには見えません。url_for は少し効率が悪い可能性があります (私は直接知りません) が、このパーシャルに対して膨大な数のループを実行していない限り、これを最適化してもおそらく大幅な時間の節約にはなりません。

とはいえ、いくつかの基本的なベンチマークを実行するのは簡単です。t = Time.now; 1 つのバージョンで 1000 回ループします。v1_time = t - Time.now; t = Time.now; すすぎ、他のバージョンで繰り返します。もしそうなら、あなたが見つけたことを私に知らせてください。

そうは言っても、フラグがビューに直接関係しない概念として表現できれば、コントローラーメソッドに適切なフラグを設定させる方が概念的にはおそらくきれいになると思います。他の人がどう思うか興味があります。

于 2012-05-30T14:30:03.380 に答える