basE91をJavascriptでそこそこ高速に使う
basE91という符号化方式を最近知った。Base64のような感じで91文字使うというもの。1文字のバリエーションが多いので、Base64より膨張率が低いのが特徴だ。C,Java,PHPあたりの実装が公開されている。
ちょっとJavascriptから使いたいことがあったので、実装を探したところJavaからの移植版があったんだが、ちょっと遅い…*1。
というわけで移植し直して、アルゴリズム以外のところでできるだけ速くしてみた。
encode/decodeのテストと繰り返し実行時の時間計測ができるようになっている。一応UTF-16⇔UTF-8変換をして日本語も通るようにした。
dankogaiさんの正規表現使ったBase64実装とも比較できるようにしてるが、IEでは割といい勝負になった気がする。他はnative codeだから勝負にならんし、対象データ量にもよるが。これは意外と何かに使えるんじゃなかろうか、と思ってこのエントリーを書いてみた。
ただbasE91ってURIセーフちゃうんよな…。Webでのデータ交換用途に使うとしたら致命的だ。
*1:しかもバグってることが後にわかった。比較ページでencodeすると正しくできていないことがわかる。