DateTime-Lite
view release on metacpan or search on metacpan
lib/DateTime/Lite/JA.pod view on Meta::CPAN
use_cache_mem => 1,
);
ã¡ã¢ãªãã£ãã·ã¥ãæå¹ãªå ´åãåãã¾ã¼ã³ã«å¯¾ããç¹°ãè¿ãã®C<new()>å¼ã³åºãã¯ãåç´ãªããã·ã¥åç
§ãããã£ãã·ã¥æ¸ã¿ãªãã¸ã§ã¯ããè¿ããç´0.8µsã§å®äºãã¾ãã
DateTime::TimeZone DateTime::Lite::TimeZone
------ ----------------- ------------------------
Cold first call ~225 ms ~22 ms
Warm (no mem cache) ~2 µs ~19 µs
Warm (mem cache only) ~2 µs ~0.4 µs
Warm (mem+span+footer cache) ~2 µs ~0.4 µs
new(named zone, all caches) ~25 µs ~14 µs
å®ç¨ä¸ã®æé:
=over 4
=item *
ååä»ãã¾ã¼ã³ãæã¤datetimeãªãã¸ã§ã¯ããæ§ç¯ããé·æé稼åãµã¼ãã¹ã§ã¯ãèµ·åæã«ä¸åº¦C<< DateTime::Lite::TimeZone->enable_mem_cache >>ãå¼ã³åºãã¦ãã ããã
ããã«ããã3層ã®ãã£ãã·ã¥ãæå¹ã«ãªãã¾ãã
=over 4
=item 1. ãªãã¸ã§ã¯ããã£ãã·ã¥ï¼SQLiteæ§ç¯ãåé¿ãã¾ãï¼ã
=item 2. spanãã£ãã·ã¥ï¼UTCãªãã»ããã¯ã¨ãªãåé¿ãã¾ãï¼ã
=item 3. footerãã£ãã·ã¥ï¼POSIX DSTè¦åè¨ç®ãåé¿ãã¾ãï¼ã
=back
ãã¹ã¦ã®å±¤ãæºåå®äºãã¦ãããC<new(named zone)>ã®ã³ã¹ãã¯ç´14µsã§ãC<DateTime>ï¼ç´25µsï¼ããé«éã§ãã
=item *
æç¤ºçãªå¶å¾¡ã好ãå ´åã¯ãåã
ã®C<new()>å¼ã³åºããã¨ã«C<< use_cache_mem => 1 >>ãæ¸¡ããã1ã¤ã®C<TimeZone>ãªãã¸ã§ã¯ããæ§ç¯ãã¦åå©ç¨ãã¦ãã ããã
my $tz = DateTime::Lite::TimeZone->new( name => 'America/New_York' );
my $dt = DateTime::Lite->new( ..., time_zone => $tz );
=item *
ãããå¦çï¼ãã°è§£æãETLãã¬ãã¼ãçæï¼ã§ã¯ãã¿ã¤ã ã¾ã¼ã³æ§ç¯ã¯ç·I/Oæéã®ããä¸é¨ã§ãããã¨ãå¤ããããã©ã®é¸æè¢ãé¸ãã§ãå·®ã¯ä½æã§ãã¾ããã
=item *
çå½ãªã¹ã¯ãªãããã³ãã³ãã©ã¤ã³ãã¼ã«ã§ã¯ãC<DateTime::Lite>ã¯èµ·åæéï¼ç´120ms 対 ç´320msï¼ã¨ã¡ã¢ãªï¼ç´19MB 対 ç´28MBï¼ã®ä¸¡æ¹ã§æå©ã§ãã
=back
=head2 ãã³ããã¼ã¯ã®å®è¡
èªå·±å®çµãããã³ããã¼ã¯ã¹ã¯ãªãããé
å¸ç©ã«å«ã¾ãã¦ãã¾ãã
cd DateTime-Lite-vX.X.X
perl Makefile.PL && make # XS ã³ã¼ããã³ã³ãã¤ã«ããã¦ãããã¨ã確èªãã¾ã
perl -Iblib/lib -Iblib/arch scripts/benchmark.pl
# ããå®å®ããæ°å¤ãå¾ãããã«å復忰ãå¢ãã:
perl -Iblib/lib -Iblib/arch scripts/benchmark.pl --iterations 50000
# æ©æ¢°å¯èªãª CSV åºå:
perl -Iblib/lib -Iblib/arch scripts/benchmark.pl --csv > results.csv
=head1 ä½¿ç¨æ¹æ³
=head2 0èµ·ç¹ã®æ°å¤ã¨1èµ·ç¹ã®æ°å¤
C<DateTime::Lite>ã¯ã0èµ·ç¹ã¨1èµ·ç¹ã®æ°å¤ã«ã¤ãã¦åç´ãªè¦åã«å¾ãã¾ãã
æãæå
ã®æ¥ãææ¥ãå¹´å
éç®æ¥ã¯B<1èµ·ç¹>ã§ãããã¹ã¦ã®1èµ·ç¹ã¡ã½ããã«ã¯C<_0>çãããã¾ãããã¨ãã°ãC<day_of_week>ã¯1ï¼æææ¥ï¼ãã7ï¼æ¥ææ¥ï¼ã¾ã§ãè¿ãã¾ãããC<day_of_week_0>ã¯0ã...
ãã¹ã¦ã®I<æå»>é¢é£ã®å¤ï¼æãåãç§ï¼ã¯B<0èµ·ç¹>ã§ãã
å¹´ã¯ã©ã¡ãã§ãããã¾ãããæ£ã®å¤ã«ãè² ã®å¤ã«ããªãå¾ã¾ããå¹´0ãåå¨ãã¾ãã
C<quarter_0>ã¡ã½ããã¯ããã¾ããã
=head2 Floating DateTimesï¼ã¿ã¤ã ã¾ã¼ã³éåºå®ã®æ¥æï¼
æ°ããC<DateTime::Lite>ãªãã¸ã§ã¯ãã®ããã©ã«ãã¿ã¤ã ã¾ã¼ã³ã¯ãç¹ã«æè¨ããã¦ããªãéããC<floating>ã¿ã¤ã ã¾ã¼ã³ã§ãããã®æ¦å¿µã¯iCalæ¨æºã«ç±æ¥ãã¾ããfloating datetimeã¯ç¹å®ã®ã¿ã¤ã ã¾...
floating datetimeã¨å®éã®ã¿ã¤ã ã¾ã¼ã³ãæã¤datetimeã®éã§æ¥ä»è¨ç®ãæ¯è¼ãè¡ãã¨ãçµæã®å¦¥å½æ§ã¯éå®çã«ãªãã¾ãã䏿¹ã¯ãããç§ãå«ã¿ããã䏿¹ã¯å«ã¾ãªãããã§ãã
å®éã®ã¿ã¤ã ã¾ã¼ã³ãæã¤ãªãã¸ã§ã¯ãã使ç¨ããäºå®ãããå ´åã¯ãfloating datetimeã¨æ··å¨ãããªããã¨ãB<å¼·ãæ¨å¥¨ãã¾ã>ã
=head2 ãã¼ã«ã«ã¿ã¤ã ã¾ã¼ã³ã®å¤å®ã¯é
ãå ´åãããã¾ã
C<$ENV{TZ}>ãè¨å®ããã¦ããªãå ´åããã¼ã«ã«ã¿ã¤ã ã¾ã¼ã³ã®æ¤ç´¢ã«ã¯F</etc>以ä¸ã®è¤æ°ã®ãã¡ã¤ã«ãèªãå¿
è¦ããããã¨ãããã¾ããããã°ã©ã ã®å®è¡ä¸ã«ãã¼ã«ã«ã¿ã¤ã ã¾ã¼ã³ãå¤ããã...
my $local_tz = DateTime::Lite::TimeZone->new( name => 'local' );
my $dt = DateTime::Lite->new( ..., time_zone => $local_tz );
C<DateTime::Lite::TimeZone>ã¯ããã®ã³ã¹ããå®å
¨ã«åãé¤ãããã»ã¹ã¬ãã«ã®ãã£ãã·ã¥ãæä¾ãã¦ãã¾ãã
DateTime::Lite::TimeZone->enable_mem_cache;
my $dt = DateTime::Lite->new( ..., time_zone => 'local' );
=head2 é ãå°æ¥ã® DST
ç¾å¨ããæ°åå¹´å¾ã®ãããªé常ã«é ãå°æ¥ã®æ¥ä»ã§ã¯ãååä»ãã¿ã¤ã ã¾ã¼ã³ã使ãC<DateTime>ã¯å¤§éã®ã¡ã¢ãªãæ¶è²»ãããã¨ãããã¾ããããã¯C<DateTime::TimeZone>ããç¾å¨ãããã®æ¥ä»ã¾ã...
C<DateTime::Lite>ã¯ãã®åé¡ã®å½±é¿ãåãã¾ãããC<DateTime::Lite::TimeZone>ã¯ãã³ã³ãã¯ããªSQLiteãã¼ã¿ãã¼ã¹ã¨POSIX footer TZæååã使ç¨ãã¦ãå®å
¨ãªé·ç§»ãã¼ãã«ãå±éãããã¨ãªããä»»æã®å°...
=head2 ããã©ã«ãã¿ã¤ã ã¾ã¼ã³ãã°ãã¼ãã«ã«è¨å®ãã
B<è¦å: ããã¯é常ã«å±éºã§ããèªå·±è²¬ä»»ã§ä½¿ç¨ãã¦ãã ããã>
次ã®ããã«è¨å®ãããã¨ã§ãC<DateTime::Lite>ã«ç¹å®ã®ããã©ã«ãã¿ã¤ã ã¾ã¼ã³ãå¼·å¶ã§ãã¾ãã
$ENV{PERL_DATETIME_DEFAULT_TZ} = 'America/New_York';
ããã¯ã使ç¨ãã¦ããCPANã¢ã¸ã¥ã¼ã«ãå«ããC<DateTime::Lite>ãªãã¸ã§ã¯ãã使ãããã¹ã¦ã®ã³ã¼ãã«å½±é¿ãã¾ããæ¬çªç°å¢ã§ä½¿ç¨ããåã«ãä¾åé¢ä¿ãç£æ»ãã¦ãã ããã
=head2 ä¸éã¨ä¸é
å
é¨çã«ã¯ãæ¥ä»ã¯C<0001-01-01>ã®åå¾ã®æ¥æ°ã¨ãã¦ä¿åãããPerlæ´æ°ã«ä¿æããã¾ããå©ç¨å¯è½ãªç¯å²ã¯ããã©ãããã©ã¼ã ã®æ´æ°ãµã¤ãºï¼C<$Config{ivsize}>ï¼ã«ä¾åãã¾ãã
=over 4
( run in 0.504 second using v1.01-cache-2.11-cpan-71847e10f99 )