[Perl] Jcode->mime_encodeは加速的遅くなる

おなかペコペコだぜー、と50代のおじいさんが言った所で誰も夕飯を恵んでくれないわけですが、掲題の件について。

メールアドレスはヘッダに入れる際には、mime_encodeしなければいけません。
で、Jcode->mime_encodeを使うと嵌る場合があります。

メールアドレス”ほげ 太郎,”をそれぞれ10個、50個、100個つなげた時の速度はこんな感じです。

[root@hermit maddr]# perl mailaddr.pl
Benchmark: timing 1 iterations of Jcode10, Jcode100, Jcode50...
Jcode10: 0 wallclock secs ( 0.07 usr + 0.00 sys = 0.07 CPU) @ 14.29/s (n=1)
(warning: too few iterations for a reliable count)
Jcode50: 40 wallclock secs ( 6.45 usr + 0.00 sys = 6.45 CPU) @ 0.16/s (n=1)
(warning: too few iterations for a reliable count)
Jcode100: 73 wallclock secs (45.03 usr + 0.03 sys = 45.06 CPU) @ 0.02/s (n=1)
(warning: too few iterations for a reliable count)


何をやっとんのじゃー!というぐらいひどい速度(T-T;)
Encode.pmを使おうかと思ったけれど、JISのMIIEエンコードの指定の仕方がまだわからず、MIME::Base64を使って同じ事をしてみる。


[root@hermit maddr]# perl mailaddr.pl
Benchmark: timing 1 iterations of Jcode50, MIME_BASE64...
Jcode50: 5 wallclock secs ( 5.58 usr + 0.01 sys = 5.59 CPU) @ 0.18/s (n=1)
(warning: too few iterations for a reliable count)
MIME_BASE64: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
(warning: too few iterations for a reliable count)


完全に同じではないけれど、mimeデコード可能なので、実用上問題ないかな。


Jcodeで10件、50件、100件の速度を計測

#!/usr/bin/perl

use Benchmark;
use Jcode;

timethese (1,
  {
    Jcode10 => sub {
      $line = q{ほげ 太郎,} x 10;
      Jcode->new($line)->mime_encode();
    },
    Jcode50 => sub {
      $line = q{ほげ 太郎,} x 50;
      Jcode->new($line)->mime_encode();
    },
    Jcode100 => sub {
      $line = q{ほげ 太郎,} x 100;
      Jcode->new($line)->mime_encode();
    },
  }
);


MIME::Base64を使ってみる

#/usr/bin/perl

use Benchmark;
use Jcode;
use MIME::Base64;

timethese (1,
  {
    Jcode50 => sub {
      $line = q{ほげ 太郎,} x 50;
      Jcode->new($line)->mime_encode();
    },
    MIME_BASE64 => sub {
      $line = q{ほげ 太郎,} x 50;
      my $encode = MIME::Base64::encode(Jcode->new($line)->jis());
      $encode =~ s/\n//g; # 改行をなくす
      $encode =~ s/(.{1,56})/ =?ISO-2022-JP?B?$1?=\n/g;
      $encode = substr($encode,1);
    },
  }
);

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック