rope ライブラリの実用性

ところで rope ライブラリって本当に役に立つもんなんでしょうか。rope は結合が早い、ということで、試しに erb の出力バッファを rope にしたものを作ってみました。通常版の erb では String#concat で結合しているのできっと早くなります。

一度に結合する文字列がかなり長い (12000 バイト) 以下のようなコードでは、通常版が 5.0 秒、rope 版が 0.8 秒になりました。

100.times do |i|
    ERB.new("<% 100.times { %>" + "foobarbazqux" * 1000 + "<% } %>").result
end

けれど、一度に結合する文字列が短い (120 バイト) 以下のようなコードでは、通常版が 1.9 秒、rope 版が 3.6 秒になりました。

10000.times do |i|
    ERB.new("<% 100.times { %>" + "foobarbazqux" * 10 + "<% } %>").result
end

で、rails などで使われる現実的な erb スクリプトで多いのは明らかに後者の場合で、erubisベンチマークでも rope 版は通常版より 2 倍くらい遅くなります。だめじゃん。