典型的なパターン:
out = ''.html_safe # or ActiveSupport::SafeBuffer.new
out << content_tag(...) if foo
out << 'hello, 1 < 2' # will be escaped properly
out << content_tag(...) if bar
out
これはうまくいきます。これよりも優れた/短い/より良い方法、特に呼び出しはあり''.html_safe
ますか?
典型的なパターン:
out = ''.html_safe # or ActiveSupport::SafeBuffer.new
out << content_tag(...) if foo
out << 'hello, 1 < 2' # will be escaped properly
out << content_tag(...) if bar
out
これはうまくいきます。これよりも優れた/短い/より良い方法、特に呼び出しはあり''.html_safe
ますか?
あなたが探している答えが本当にあるとは思わないので、私はこれに賛成しません。しかし、とにかく検討のためにいくつかの考えを共有したいと思いました.
これは実際にはおそらく読みにくいですが、ベンチマークと質問で使用されている実装の結果を確認したいと思います。
out = "#{content_tag(...) if foo}" <<
"hello, 1 < 2" <<
"#{content_tag(...) if bar}"
out.html_safe
html_safe
また、最初と戻る前の設定に違いがあるかどうかを知る方法の内部構造にも精通していません。html_safe
潜在的に長い文字列ではなく長さゼロの文字列を複製しているため、初期設定の方が高速になると思いますが、引数のために:
out = '' # or ActiveSupport::SafeBuffer.new
out << content_tag(...) if foo
out << 'hello, 1 < 2' # will be escaped properly
out << content_tag(...) if bar
out.html_safe
それを念頭に置いて、上記の元のコードを変更してさらに一歩進めることを検討します。
"#{content_tag(...) if foo}".html_safe <<
"hello, 1 < 2" <<
"#{content_tag(...) if bar}"
繰り返しますが、あまり読みやすいものではありませんが、考えの材料としてそこに投げ出そうと思いました.