文字列に文字列を追加するときに+=を使うのと<<を使うのではスピードが325倍違う
$ time ruby19 -e 's="";50000.times{s+="foobar"};' 4.58s user 9.03s system 99% cpu 13.650 total $ time ruby19 -e 's="";50000.times{s<<"foobar"};' 0.03s user 0.01s system 79% cpu 0.042 total
えーっと、連結スピードが325倍違います。
注意が必要なのは+=は単純な連結ではないことです。
a="foo" b=a
となっているときに
b<<"bar"
とやるのと
b+="bar"
とやるのでは結果が違います。<<はaもbも文字列が追加されます。
+=は参照先が変更されてしまいますので、bしか追加されません。
結論
<<を使え
cgi.rbでは使っているんだよなぁ。直すぞ。
追記
なんだかはてぶで理由も説明してやれよなんて書かれたので
理由を説明します。<<は単純な文字列の追加メソッドなのですが、
+=はリファレンスマニュアルに書いているように
式1 = 式1 + 式2
と評価されます。このコストが高いと言う事です。
式1 + 式2 でオブジェクトが作られ、それが式1に代入(参照)されます。