はい、皆さんが見ていないであろう時間にこんばんはマコピーです。
なんか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ぐらいかかるってこの前社内IRCでid:sfujiwaraさんが言ってましたし、いっそオブジェクトをキャッシュしてそれをcloneして使うっていうテクニックも存在するぐらいで。
で、Time::Piece。シンプルイズベストなコアモジュール。今はこいつでそこまで不便していませんし、@songmuさんがTime::Piece::Plusっていう出来るだけDateTimeと使用感を近づけるモジュールをメンテしていますしいい感じです。
が、何故かDateTime::Tiny速い。コード見たらシンプル過ぎてなにもやってない感じしますが。ところどころ意味不明なところありますけれど。
でも2009年からメンテされてませんしうーんって感じですけれどシンプル過ぎてもうやることない感じですかね。
そんなわけで、MongoDBをTime::PieceとMouseに書き換えようとして見つけた発見でした〜