Re: DateTime::Lite
[email protected] (Daisuke Maki)
| Newsgroups | perl.datetime |
|---|---|
| Message-ID | <[email protected]> |
>> A lot of times you don't even need to do date time arithmetic, for
>> example. These methods are separated out onto a different file, so you
>> need to load it on demand.
>>
>> use DateTime::Lite qw(Arithmetic);
>> use DateTime::Lite qw(Strftime);
>
> Have you actually benchmarked the memory usage and compile speed for
> this stuff? I have a hard time imagining it really is all that slow,
> since it amounts to a few methods in each case.
Yes, I wrote a crude benchmark script in
DateTime-Lite/tools/benchmar/load_times.pl
If you don't load arithmetic and strftime, DT::Lite is twice as fast
plain DT.
Rate dt dt_lite_full dt_lite
dt 46.6/s -- -13% -49%
dt_lite_full 53.7/s 15% -- -41%
dt_lite 91.7/s 97% 71% --
And again, /I know/ this isn't that much of a practical problem, because
the engineer's correct answer is "if the load time is slow, load it
once, and use some sort of persistent environment". This is mainly a
marketing issue to my audience, who, for example, includes CGI
developers (i.e., persistent environment isn't an option).
BTW, dt_lite_full is almost equivalent to using DateTime.pm, but I
/think/ the difference comes from the tweak I did to switch method calls
to function calls. That can probably be tweaked in DateTime.pm, if you
want me to apply it.
>
>> Singletons are okay, they serve a particular purpose. But besides being
>> a memory hog of relative low benefit, when given the number of time
>> zones are locales, they are just way too overwhelming for underlings.
>
> Could you explain this? What are you doing instead of singletons? Do you
> reload the time zone every time it's asked for?
>
> Also, that second sentence makes no sense ;)
No, it's cached in memory, so in that sense they are "singletons".
However, they are all instances of the same DT::Lite::TimeZone object.
When asked to load a time zone, I'm just require()ing a plain perl file,
and shoving them to the constructor of DT::Lite::TimeZone. The timezone
created is stored in a hash.
Creating GVs for each timezone is a waste. Creating one class, then
creating instances for each timezones are much cheaper. I discussed this
briefly when I was trying to do DateTime::TimeZone::XS, but I got warnocked.
>> With this version, the objects are mostly the just plain objects, and
>> the exact definition for each timezone/locale is stored in data files.
>
> What do the data files look like? If using them is faster than the
> current DT::TZ implementation, is there any reason we can't switch
> DT::TZ to use it?
I don't think DT::TZ will benefit anything from using my method, as they
are true singletons. the data format isn't going to change anything.
I'm not saying DT::TZ needs to change, either. If you want singletons
that's just fine, but one of my requirements is to reduce the number of
classes that needs to be installed.
Again, /I know/ that installing data files instead of classes isn't any
better, but I'd like to have a way to pick and choose which time zones
the user wants to use/install, so they have the illusion of control over
how much stuff is required to run DT::Lite.
--d