Here is another way to profile DateTime for the modules it loads at compile
time:

    perl -d:TraceUse -MDateTime -c -e0

Here is below the output (latest releases of DateTime, DateTime::Locale,
DateTime::TimeZone on perl 5.20.0).
DateTime::Locale::Catalog is the module that contains all the locales names.
David, is it that module that you worry about or have you found something
worse?

Modules used from -e:
   1.  DateTime 1.10, -e line 0 [main]
   2.    strict 1.08, DateTime.pm line 5
   3.    warnings 1.23, DateTime.pm line 6
   4.    warnings::register 1.03, DateTime.pm line 7
   5.    Carp 1.3301, DateTime.pm line 9
   6.      Exporter 5.70, Carp.pm line 99
   7.    DateTime::Duration 1.10, DateTime.pm line 10
   8.      DateTime::Helpers 1.10, DateTime/Duration.pm line 8
   9.        Scalar::Util 1.38, DateTime/Helpers.pm line 6
  10.          List::Util 1.38, Scalar/Util.pm line 11
  11.            XSLoader 0.17, List/Util.pm line 21
  12.      Params::Validate 1.10, DateTime/Duration.pm line 9
  13.        Module::Implementation 0.07, Params/Validate.pm line 9
  14.          Module::Runtime 0.014, Module/Implementation.pm line 12
  23.            Params::Validate::XS 1.10, Module/Runtime.pm line 317
  43.            Class::Load::XS 0.08, Module/Runtime.pm line 317
  15.          Try::Tiny 0.22, Module/Implementation.pm line 13
  16.            Sub::Name 0.05, Try/Tiny.pm line 18 (eval 4)
  17.              base 2.22, Sub/Name.pm line 49
  18.                vars 1.03, base.pm line 4
  19.                DynaLoader 1.25, base.pm line 99
  20.                  Config 5.020000, DynaLoader.pm line 22
  52.                DateTime::Locale::en, base.pm line 99
  53.                DateTime::Locale::root, base.pm line 99
  21.            constant 1.31, Try/Tiny.pm line 144 [Try::Tiny::ScopeGuard]
  22.        Params::Validate::Constants 1.10, Params/Validate.pm line 10
  24.      overload 1.22, DateTime/Duration.pm line 18
  25.        overloading 0.02, overload.pm line 83
  26.    DateTime::Locale 0.45, DateTime.pm line 12
  27.      DateTime::Locale::Base, DateTime/Locale.pm line 10
  28.        List::MoreUtils 0.33, DateTime/Locale/Base.pm line 8
  29.      DateTime::Locale::Catalog, DateTime/Locale.pm line 11
  30.        utf8 1.13, DateTime/Locale/Catalog.pm line 19
  51.      DateTime::Locale::en_US, DateTime/Locale.pm line 280 (eval 21)
  31.    DateTime::TimeZone 1.72, DateTime.pm line 13
  32.      DateTime::TimeZone::Catalog 1.72, DateTime/TimeZone.pm line 10
  33.      DateTime::TimeZone::Floating 1.72, DateTime/TimeZone.pm line 11
  34.        parent 0.228, DateTime/TimeZone/Floating.pm line 6
  35.          Class::Singleton 1.4, parent.pm line 20
  36.          DateTime::TimeZone::OffsetOnly 1.72, parent.pm line 20
  37.            DateTime::TimeZone::UTC 1.72,
DateTime/TimeZone/OffsetOnly.pm line 8
  38.      DateTime::TimeZone::Local 1.72, DateTime/TimeZone.pm line 12
  39.        Class::Load 0.21, DateTime/TimeZone/Local.pm line 6
  40.          Data::OptList 0.109, Class/Load.pm line 10
  41.            Params::Util 1.07, Data/OptList.pm line 10
  42.            Sub::Install 0.927, Data/OptList.pm line 11
  44.        File::Spec 3.47, DateTime/TimeZone/Local.pm line 8
  45.          File::Spec::Unix 3.47, File/Spec.pm line 22
  46.    POSIX 1.38_03, DateTime.pm line 16
  47.      Fcntl 1.11, POSIX.pm line 17
  48.      Tie::Hash 1.05, POSIX.pm line 422 [POSIX::SigRt]
  49.    integer 1.01, DateTime.pm line 756
  50.    DateTime::Infinite 1.10, DateTime.pm line 68
Possible proxies:
   3 base.pm line 99, sub base::import
   2 Module/Runtime.pm line 317, sub Module::Runtime::require_module
   2 parent.pm line 20, sub parent::import





2014-08-05 23:06 GMT+02:00 David E. Wheeler <[email protected]>:

> DateTimers,
>
> While profiling Sqitch, I found that the biggest suck on its time (now
> that I have removed Moose and Mouse in favor of Moo) is DateTime. The
> reason? It loads all of the locales in its BEGIN block. Run this to see for
> yourself:
>
>     perl -d:NYTProf -e 'use DateTime;' && nytprofhtml --open
>
> Here's the topline:
> Top 15 Subroutines CallsP FExclusive
> Time Inclusive
> TimeSubroutine 4661 115.6ms 24.4ms DateTime::Locale::_register 1 11 11.2ms
> 119ms main::BEGIN@1 4682 28.65ms 8.65ms Params::Validate::XS::validate
>  (xsub) 1 11 8.29ms8.50ms DateTime::Locale::BEGIN@11 99 65.23ms 6.44ms
> base::import (recurses: max depth 2, inclusive time 1.79ms) 1 11 3.65ms
> 7.98ms DateTime::BEGIN@16 11 13.53ms 4.54msDateTime::TimeZone::Local::
> BEGIN@8 1 11 3.22ms21.6ms DateTime::BEGIN@13 11 12.99ms 3.08ms
> DateTime::TimeZone::BEGIN@8 1 11 2.97ms3.19ms DateTime::BEGIN@9 11 12.91ms
> 4.26ms DateTime::Locale::BEGIN@10 1 11 2.74ms6.58ms DateTime::Locale::
> add_aliases 2424 182.73ms 2.97ms Exporter::import 1 11 2.53ms2.87ms
> Try::Tiny::ScopeGuard::BEGIN@144 11 12.38ms 3.00ms Data::OptList::BEGIN@10
>
> Does DateTime *really* need to always load all 466 locales on startup?
> Couldn't it load them on demand?
>
> Thanks,
>
> David
>
>

Reply via email to