basE91をJavascriptでそこそこ高速に使う

basE91という符号化方式を最近知った。Base64のような感じで91文字使うというもの。1文字のバリエーションが多いので、Base64より膨張率が低いのが特徴だ。C,Java,PHPあたりの実装が公開されている。

ちょっとJavascriptから使いたいことがあったので、実装を探したところJavaからの移植版があったんだが、ちょっと遅い…*1
というわけで移植し直して、アルゴリズム以外のところでできるだけ速くしてみた。

encode/decodeのテストと繰り返し実行時の時間計測ができるようになっている。一応UTF-16UTF-8変換をして日本語も通るようにした。

dankogaiさんの正規表現使ったBase64実装とも比較できるようにしてるが、IEでは割といい勝負になった気がする。他はnative codeだから勝負にならんし、対象データ量にもよるが。これは意外と何かに使えるんじゃなかろうか、と思ってこのエントリーを書いてみた。

ただbasE91ってURIセーフちゃうんよな…。Webでのデータ交換用途に使うとしたら致命的だ。

*1:しかもバグってることが後にわかった。比較ページでencodeすると正しくできていないことがわかる。