[Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いんじゃ?

前回のあらすじ:
Jcodeと同じく、EncodeのMIME-Header-ISO-2022-JPが遅いのではないかという疑惑が!!
Jcodeの話
 http://cast-a-spell.at.webry.info/200709/article_9.html
前回の話
 http://cast-a-spell.at.webry.info/201004/article_9.html

で、Perl5.8では遅くて、5.8.9では速い?みたいな話もあってですね。
 http://isoya.at.webry.info/201004/article_7.html


この原因なんですが、おじいさんも自宅で5.12で試した時に気づかなかったんですが、

my $str = q{あいうえお , } x 150;

上の行で、最後にスペースが入っている、いないによってエンコード結果が異なるため、速度に違いが出るのです。
#しかし、isoya9さんには同じコードのファイルを送って、速度計測してもらって、速かった覚えが。。。

自宅のPerl5.12、QuadCoreマシンで簡単に調べると、

スペースあり。

# time perl h.pl
(中略)
=?ISO-2022-JP?B?GyRCJCIkJCQmJCgkKhsoQg==?= ,
=?ISO-2022-JP?B?GyRCJCIkJCQmJCgkKhsoQg==?= ,
=?ISO-2022-JP?B?GyRCJCIkJCQmJCgkKhsoQg==?=
real 0m0.125s
user 0m0.065s
sys 0m0.054s


スペースなし。

# time perl h.pl
(中略)
=?ISO-2022-JP?B?GyRCJCQkJiQoJCobKEIgPGFpb3VlQGhvZ2UuY29tPhskQiQiJCQbKEI=?=
=?ISO-2022-JP?B?GyRCJCYkKCQqGyhCIDxhaW91ZUBob2dlLmNvbT4bJEIkIiQkJCYbKEI=?=
=?ISO-2022-JP?B?GyRCJCgkKhsoQg==?=
real 0m42.144s
user 0m41.759s
sys 0m0.314s


まあ、この激烈に遅い原因なんですが、SmallProfを取った所によると、どうもUTF8→EUCと変換して分解、断片ごとにISO-2022-JPへ直してからBエンコードしているのですが、そのEUC→JIS変換が猛烈に呼び出されて遅い模様。

具体的には、Encode::JP::JIS7::jis_eucがアホほど呼び出されて、遅い模様。具体的には、q{あいうえお , } x 20;程度で20の呼び出しのはずが、q{あいうえお ,} x 20;では3445の呼び出しになってます。


これは、抜本的にはEncode::MIME::Header::ISO_2022_JP モジュールを今風に作り直してやった方がいいような。
どう考えても、Jcode時代の内容を引きずりすぎですもん。。




まるごとPerl! Vol.1
インプレスコミュニケーションズ
小飼 弾

ユーザレビュー:
ちょっと敷居が高いP ...
技術書・解説書という ...
amazon.co.jpで買う
Amazonアソシエイト by ウェブリブログ商品ポータルで情報を見る


"[Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いんじゃ?" へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント