isoya9の日記

アクセスカウンタ

help リーダーに追加 RSS [Perl] Encode.pm Jcode.pm のベンチマーク比較

<<   作成日時 : 2006/09/26 23:44   >>

トラックバック 3 / コメント 2

まるごとPerl! Vol.1に Encode.pm が
特集されていましたが、今までなぜが Jcode.pm ばかり使ってました。
この機会に Encode.pm に切り替えようと思ったのですが、Jcode.pm と
どのくらい性能差があるか気になったのでベンチしてみました。

シナリオ
「漢字、カタカナ、ひらがなの混じったtext」に対して
・Jcode->new で euc/utf8 相互変換
・Jcode::convert で euc/utf8 相互変換
・Encode.pm で euc/utf8 相互変換

ソースコード
use strict;
use warnings;
use Benchmark ':all';
use Jcode;
use Encode;
my $text = qq{漢字、カタカナ、ひらがなの混じったtext};

cmpthese(
timethese(
10000,
{
Jcode => sub {
# euc => utf8
$text = Jcode->new($text)->utf8;
# utf8 => euc
$text = Jcode->new($text)->euc;
},
Convert => sub {
# euc => utf8
Jcode::convert( \$text, 'utf8', 'euc' );
# utf8 => euc
Jcode::convert( \$text, 'euc', 'utf8' );
},
Encode => sub {
# euc => utf8
Encode::from_to($text, "euc-jp", "utf-8");
# utf8 => euc
Encode::from_to($text, "utf-8", "euc-jp");
},
}
)
);

結果
Benchmark: timing 10000 iterations of Convert, Encode, Jcode...
Convert: 0 wallclock secs ( 0.75 usr + 0.00 sys = 0.75 CPU) @ 13333.33/s (n=10000)
Encode: 0 wallclock secs ( 0.54 usr + 0.00 sys = 0.54 CPU) @ 18518.52/s (n=10000)
Jcode: 3 wallclock secs ( 3.20 usr + 0.00 sys = 3.20 CPU) @ 3125.00/s (n=10000)
Rate Jcode Convert Encode
Jcode 3125/s -- -77% -83%
Convert 13333/s 327% -- -28%
Encode 18519/s 493% 39% --

さすが、Encode.pm が TOP でした。
Jcode->new が恐ろしく遅いです。
(変換前のコード検出処理の影響と思われます)
また、Jcode->new は変換漏れなんかがたまにあるので
Encode.pm が無い環境であれば、Jcode::convert 使いましょう。
まるごとPerl! Vol.1

設定テーマ

関連テーマ 一覧

月別リンク

トラックバック(3件)

タイトル (本文) ブログ名/日時
Encode.pm, Jcode.pm, Text::Iconv のベンチマーク比較
Encode.pm Jcode.pm のベンチマーク比較 ではEncode.pmとJcode.pmのベンチマークをとっていて便利。ただし、もう一つの変換系であるText::Iconvが含まれていなかったので、追試も兼ねてText::Iconvを含めたベンチマークをやってみる。スクリプトはこんな感じ: ...続きを見る
Public Diary
2006/10/27 20:04
Encode, Text::Iconv, Unicode::Japanese, Jcode, jco...
というわけで、やってみました。 入力コードの自動判別機能を持つモジュールはそれを使った場合 (guess) と使わない場合 (fixed) 両方でテストjcode.pl は型グロブ渡し (grob) 参照渡し (ref) 両方をテストjcode.pl はキャッシュ使用 (cache) 不使用 (nocache) 両方をテストjcode.pl は utf8 をサポートしてないため、sjis との変換で。ただし他のモジュールとの不公平が出ないよう、他のモジュールでは utf8 だけでなく sjis ... ...続きを見る
[ぴ]
2006/10/31 02:45
[Perl] Encode Jcode Unicode::Japanese のベンチマーク比較
[Perl] Encode.pm Jcode.pm のベンチマーク比較 について Encode, Text::Iconv, Unicode::Japanese, Jcode, jcode.pl のベンチマーク比較 で 掘り下げて頂いたので、もう一度検証してみました。 と、言っても同じではつまらないので、半角カタカナ→全角カタカナ変換を追加してみました。 ...続きを見る
isoya9の日記
2006/10/31 10:56

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
Jcode => sub {
# euc => utf8
$text = Jcode->new($text,'euc')->utf8;
# utf8 => euc
$text = Jcode->new($text,'utf8')->euc;
},
とすればここまで差はつかないですね。
太鉄
2007/06/22 20:50
そうですね。
変換前の文字コードを指定すれば、自動検出のコストが省けるので差が縮まると思います。
isoya9
2007/06/22 22:18

コメントする help

ニックネーム
本 文