From: | gregoa [...] cpan.org |
Subject: | MIME::Decoder::Base64::encode_it() is too slow |
We have the following bug reported to the Debian package of
MIME-tools, c.f. https://bugs.debian.org/931769
It doesn't seem to be a bug in the packaging, so you may want to take
a look. Thanks!
------8<-----------8<-----------8<-----------8<-----------8<-----
Package: libmime-tools-perl
Version: 5.508-1
(Issue believed to be still present in the latest version 5.509-1.)
When base64-encoding a large file, MIME::Decoder processes it 45 bytes at a
time. The resulting function call (and, depending on the application, system
call) overhead can be very noticeable. I've seen RT (Debian package
request-tracker4) hit a 40-second timeout while encoding a 8MB attachment
because of this.
Significant gains can be had by telling the encoder to process the file in
larger chunks; I've set $EncodeChunkLength = 120*57 with good results.
This takes advantage of the fact that MIME::Base64::encode_base64() will
split the output into 76-byte lines by default; the feature has been
documented since at least version 2.04 of MIME::Base64 (the minimum
version required by MIME::Decoder::Base64).
Maybe the encode chunk length should somehow be made configurable. If output
is to a pipe one may want not to exceed the pipe buffer size (currently 64kB
in Linux, but it can be smaller on other operating systems).
------8<-----------8<-----------8<-----------8<-----------8<-----
Thanks for considering,
gregor herrmann,
Debian Perl Group