From: URABE Shyouhei Date: 2003-07-16T08:15:45+09:00 Subject: [ruby-list:37877] Re: ERB の仕様 --Apple-Mail-1-546849387 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=ISO-2022-JP; format=flowed mput です。 On 2003.07.16, at 06:20, Masatoshi SEKI wrote: >> 私としては tDiary の高速化というお題目もあって、もうちょっとさっぱりし >> た仕様で軽い ERB になって欲しいと思うのです。 > > えと、仕様変えて速くするのでしょうか? すいません、これでは論点がはっきりしませんね。 (1) 個人的には ERB の挙動は複雑だおとおもう (2) ERB の速度が遅いように感じられる(場合によって数秒待たされるのを遅 いとみなすかは個人差があるでしょう) (3) よりスマートな規則に変更したら、速度にも効果があるのではないか ということでした。速くするために仕様を変えるのはなにやら本末転倒のよう な気がします。 >> * 先頭が % や %% からはじまる行では、 '<%%' や '%%>' が出現しても '<%' >> や '%>' に変換されない >> >> というのは、その他の部分と一貫性がなくて混乱の元のように感じますが、い >> かがでしょう。 > > うーん。%はRubyスクリプトがそのまま書けることがうれしいので、 > 変換されると困るんじゃないでしょか。 % はともかく %% はスクリプトじゃないんだから、変換してくれなきゃ困る気 がするんです。他の地の文と釣り合いが取れないんじゃないかと。 # みなさんご不満なくお使いですので困ってないのかもしれませんが > で、おもしろそうな高速化なんですが、事前にsplitで分割するから > 大きなeRubyスクリプトで遅くなってしまう、という印象ですか?? > オブジェクトをたくさん生成しちゃうからかしら。 じつは String#split はそんなに時間かかってません。 末尾に % ruby -e'1024.times{|i| puts "<%=#{i}%>"}' > sample.erb % ruby -rprofile -rerb -e'ERB.new(ARGF.read).result' sample.erb とかやって生成したプロファイルを添付しておきます。 --Apple-Mail-1-546849387 Content-Disposition: attachment; filename=profile.txt Content-Transfer-Encoding: 7bit Content-Type: text/plain; x-unix-mode=0644; name="profile.txt" % cumulative self self total time seconds seconds calls ms/call ms/call name 48.38 10.42 10.42 1 10420.00 20600.00 ERB::Compiler#compile 12.26 13.06 2.64 32770 0.08 0.08 String#== 8.87 14.97 1.91 1 1910.00 2760.00 Array#each 8.45 16.79 1.82 4096 0.44 0.65 Array#include? 5.25 17.92 1.13 12296 0.09 0.09 Array#push 2.88 18.54 0.62 1 620.00 920.00 Kernel.eval 2.32 19.04 0.50 2051 0.24 0.33 Kernel.=== 2.23 19.52 0.48 6145 0.08 0.08 Array#shift 1.86 19.92 0.40 3073 0.13 0.13 Module#=== 1.39 20.22 0.30 3073 0.10 0.10 Array#join 1.35 20.51 0.29 4097 0.07 0.07 NilClass#nil? 1.02 20.73 0.22 2048 0.11 0.11 String#concat 0.84 20.91 0.18 2048 0.09 0.09 Kernel.nil? 0.56 21.03 0.12 1028 0.12 0.12 Kernel.== 0.56 21.15 0.12 1025 0.12 0.12 Fixnum#> 0.46 21.25 0.10 1024 0.10 0.10 String#size 0.42 21.34 0.09 1024 0.09 0.09 String#dump 0.37 21.42 0.08 1024 0.08 0.08 Fixnum#to_s 0.32 21.49 0.07 1025 0.07 0.07 Array#pop 0.28 21.55 0.06 1 60.00 60.00 Profiler__.start_profile 0.14 21.58 0.03 2 15.00 15.00 String#split 0.00 21.58 0.00 1 0.00 0.00 ERB::Compiler#prepare_trim_mode 0.00 21.58 0.00 1 0.00 0.00 -.read 0.00 21.58 0.00 1 0.00 0.00 ERB#set_eoutvar 0.00 21.58 0.00 2 0.00 0.00 Array#concat 0.00 21.58 0.00 1 0.00 0.00 Module#attr 0.00 21.58 0.00 1 0.00 0.00 Array#size 0.00 21.58 0.00 3 0.00 0.00 Class#inherited 0.00 21.58 0.00 1 0.00 20600.00 ERB#initialize 0.00 21.58 0.00 3 0.00 0.00 Fixnum#== 0.00 21.58 0.00 1 0.00 920.00 ERB#result 0.00 21.58 0.00 1 0.00 30.00 ERB::Compiler#pre_compile 0.00 21.58 0.00 3 0.00 0.00 Module#attr_accessor 0.00 21.58 0.00 1 0.00 21540.00 #toplevel 0.00 21.58 0.00 9 0.00 0.00 Module#method_added 0.00 21.58 0.00 1 0.00 0.00 ERB::Compiler#initialize 0.00 21.58 0.00 1 0.00 0.00 IO#close 0.00 21.58 0.00 1 0.00 0.00 Module#module_function 0.00 21.58 0.00 2 0.00 10300.00 Class#new 0.00 21.58 0.00 2 0.00 0.00 Module#public --Apple-Mail-1-546849387--