たまには呪文をとなえてみるか:仕事版

アクセスカウンタ

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

<<   作成日時 : 2010/05/11 23:04   >>

ブログ気持玉 0 / トラックバック 3 / コメント 0

前回のあらすじ:
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{あいうえお <abc@def.com>, } x 150;

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

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

スペースあり。

# time perl h.pl
(中略)
=?ISO-2022-JP?B?GyRCJCIkJCQmJCgkKhsoQg==?= <aioue@hoge.com>,
=?ISO-2022-JP?B?GyRCJCIkJCQmJCgkKhsoQg==?= <aioue@hoge.com>,
=?ISO-2022-JP?B?GyRCJCIkJCQmJCgkKhsoQg==?= <aioue@hoge.com>
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==?= <aioue@hoge.com>
real 0m42.144s
user 0m41.759s
sys 0m0.314s


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

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


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




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

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


この記事は5分で読めます。

テーマ

関連テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(3件)

タイトル (本文) ブログ名/日時
「[Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いん...
「[Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いんじゃ?」について ...続きを見る
isoya9の日記
2010/05/11 23:32
MIMEエンコード
前回の続きだけど(perlでsmtpサーバーに接続して送信) 問題なのが、意外に文字列処理。 昔は、eucで書いて、Jcodeでsjisやjisに変換していました。 今は、utf8で書いて、Unicode::Japaneseで処理してます。 MIMEエンコードをどうしようかな。MIMEの部分だけ、JcodeかEncodeを使用しようとしたら、処理がすごく遅いという、気になる記事が。([Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いんじゃ? たまには呪文を... ...続きを見る
えむけいプラン
2010/05/28 15:55
[Perl] ISO-2022-JPのエンコードの件の続き
メモ ...続きを見る
たまには呪文をとなえてみるか:仕事版
2011/01/10 00:16

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
[Perl] 帰ってきたEncodeのMIME-Header-ISO_2022_JPは遅いんじゃ? たまには呪文をとなえてみるか:仕事版/BIGLOBEウェブリブログ
[ ]