ぱいぱいにっき

Pythonが好きすぎるけれど、今からPerlを好きになりますにっき

DateTime::Tinyが速い

はい、皆さんが見ていないであろう時間にこんばんはマコピーです。

なんかDateTime::Tinyっていうモジュールをひょんなことから見つけたのでこいつホンマに速いんかいのうと思って調べてみました。
何かしらのWebアプリ作るにしても時間を扱うことは必須に近いので、ちょっと興味を持ったのでした。

比較対象はみんな大好きDateTime、それから標準モジュールのTime::Piece、んでもってDateTime::Tiny。
方法は普通に現在時間返すやつとISO8601形式の文字列からパースして返す奴。
環境は5.16.2(あ、まだ開発環境の脆弱性のアップデートしてなかった。。)
モジュールのバージョンは、
DateTime => 0.78
DateTime::Tiny => 1.04
Time::Piece => 1.20_01

コード。

結果。

Create Now DATETIME Object:
                   Rate       DateTime    Time::Piece DateTime::Tiny
DateTime        12867/s             --           -85%           -92%
Time::Piece     84134/s           554%             --           -47%
DateTime::Tiny 159256/s          1138%            89%             --

Create DATETIME Object from ISO 8601 like String:
                   Rate       DateTime    Time::Piece DateTime::Tiny
DateTime         2248/s             --           -98%           -98%
Time::Piece    122240/s          5339%             --           -10%
DateTime::Tiny 135256/s          5918%            11%             --

ほう。DateTime::Tiny速い。
DateTimeが遅いのは当然で、作るだけで0.3msぐらいかかるってこの前社内IRCid:sfujiwaraさんが言ってましたし、いっそオブジェクトをキャッシュしてそれをcloneして使うっていうテクニックも存在するぐらいで。
で、Time::Piece。シンプルイズベストなコアモジュール。今はこいつでそこまで不便していませんし、@さんがTime::Piece::Plusっていう出来るだけDateTimeと使用感を近づけるモジュールをメンテしていますしいい感じです。
が、何故かDateTime::Tiny速い。コード見たらシンプル過ぎてなにもやってない感じしますが。ところどころ意味不明なところありますけれど。
でも2009年からメンテされてませんしうーんって感じですけれどシンプル過ぎてもうやることない感じですかね。

そんなわけで、MongoDBをTime::PieceとMouseに書き換えようとして見つけた発見でした〜