From: m_seki@... Date: 2003-07-16T08:28:38+09:00 Subject: [ruby-list:37879] Re: ERB の仕様 咳といいます。 > (2) ERB の速度が遅いように感じられる(場合によって数秒待たされるのを遅 > いとみなすかは個人差があるでしょう) 数秒待たされるのは、どのくらい大きさのeRubyスクリプトですか? > % はともかく %% はスクリプトじゃないんだから、変換してくれなきゃ困る気 > がするんです。他の地の文と釣り合いが取れないんじゃないかと。 > # みなさんご不満なくお使いですので困ってないのかもしれませんが %% hogehogehoge はそのまま % hogehogehoge にしたい という指示ではないでしたっけ。 ちょっと自信がありません。 > じつは String#split はそんなに時間かかってません。 末尾に > % ruby -e'1024.times{|i| puts "<%=#{i}%>"}' > sample.erb > % ruby -rprofile -rerb -e'ERB.new(ARGF.read).result' sample.erb > とかやって生成したプロファイルを添付しておきます。 えと、事前にsplitしてしまう、つまり分解したものをArrayでもってる 作戦がイマイチなんでしょか?という意味です。 sample.erbはどのくらいの大きさですか? 1.2MBくらいの素朴なeRubyスクリプトを準備して試したのですが、 ruby1.6.8とruby1.8.0だと全く結果が違くて驚きました。 % time erb16 test_data.erb ... 368.870u 1.350s 6:46.66 91.0% 0+0k 0+0io 331pf+0w % time erb18 test_data.erb ... 6.380u 0.170s 0:11.53 56.8% 0+0k 0+0io 407pf+0w 1.8.0のArray#pushやArray#joinが速いとか!? 14MBのはうんざりするほど遅いので計測しませんでした。 以前、細かい文字列を連結するのにArrayに入れて あとでjoinすると速いと思っていましたが、 String#concatの方が速いかなあ。 # compileはイマイチですね。 # このメソッドは咳のスクリプトの中で最長かもしれない…