From: URABE Shyouhei Date: 2003-07-16T12:42:17+09:00 Subject: [ruby-list:37883] Re: ERB の仕様 mput です。 On 2003.07.16, at 08:28, m_seki@mva.biglobe.ne.jp wrote: >> % はともかく %% はスクリプトじゃないんだから、変換してくれなきゃ困る気 >> がするんです。他の地の文と釣り合いが取れないんじゃないかと。 >> # みなさんご不満なくお使いですので困ってないのかもしれませんが > > %% hogehogehoge はそのまま % hogehogehoge にしたい > という指示ではないでしたっけ。 > > ちょっと自信がありません。 現状はたしかにそうみたいです [localhost:~]% echo "%% foo <%='bar'%>" | /usr/local/bin/erb % foo <%='bar'%> # これ、何の役に立ってるんだろう >> じつは String#split はそんなに時間かかってません。 末尾に >> % ruby -e'1024.times{|i| puts "<%=#{i}%>"}' > sample.erb >> % ruby -rprofile -rerb -e'ERB.new(ARGF.read).result' sample.erb >> とかやって生成したプロファイルを添付しておきます。 > > えと、事前にsplitしてしまう、つまり分解したものをArrayでもってる > 作戦がイマイチなんでしょか?という意味です。 最初はある文字列を split でトークナイズしてから String#== で比較すると いう戦略が無駄に思えて(だって split の段階で一旦スキャンしてるはずなの に String#== は memcmp だからまたスキャンすることに)、順次切り出す方式 を提案したのですが、実はプロファイルを取ってみたら String#split はほと んど無視できる程度だったので、この仮説は間違っていたと思います。という わけで、イマイチなのかそうでないのかなんとも分かりません # でも String#== は構文要素数に対してだいたい10倍以上の回数呼ばれている # ようなので、どこか無駄はあると思います。 > sample.erbはどのくらいの大きさですか? ここでeRuby スクリプトの大きさといったときに * ファイルサイズ * <% %> などの構文要素の数 の2通りの基準があるのではないかと考えます。私の方でいろいろなファイル を食べさせてみましたが、速度はあまりファイルサイズには関係なくて、構文 要素数によく相関しているように見受けられました。 sample.erb はまさに上 のワンライナーで生成したものですので、構文要素の割合は非常に高いと思い ます。ちょっとフェアじゃなかったかもしれません。 とはいえ他人の eRuby スクリプトを見たことがないものですから、標準的な 構文要素の割合がどのようなものか見当もつきません。用途によっても違う気 がしますし。 -- mput