【PHP8.1】new DateTimeZone()が170倍速くなったよ
PHP8.1では、DateTimeZoneのインスタンス生成が少しばかり高速化しました。
$t1 = microtime(true);
for ($i=1; $i<1000000; $i++) {
$dummy = new \DateTimeZone('Asia/Tokyo');
}
$t2 = microtime(true);
var_dump($t2-$t1);
8.1.0 | 8.0.13 | 7.4.9 |
---|---|---|
0.131 | 8.115 | 8.498 |
0.134 | 8.077 | 8.502 |
1000000インスタンス生成に8秒強かかっていたのが0.1秒になりました。
なんだこれ。
timelib performance fix
Dmitry Stogov
へいDerick、https://github.com/derickr/timelib/pull/99のプルリクについて意見を聞かせてくれないか?
この修正でnew DateTimeZone()
を170倍改善したよ。
結果、幾つかの現実的なアプリでも目に見える高速化があったよ。
たとえばSymfonyのデモではcallgrindが7%改善した。
この修正は半年以上前に送ったやつなんだけど、PHP8.1に入れてくれたらありがたい。
Derick Rethans
当時のプルリクでは修正必須
のステータスだったと思うんだけど、今見てみたらPOSIXの仕様にちゃんと従ってますね。
PHPのmasterに、他のバグフィックスと共にマージしました。
PHP8.1
この修正は6871a49b6609a98e291248b0e89ae9730d9dd580でマージされ、PHP8.1でリリースされました。
感想
この手の単純ループのパフォーマンス計測は性能厨が喜ぶだけで基本的には意味がないものですが、さすがにこれほどの差であれば実アプリで目に見える程度に影響が出てくるようです。
それにしても、ほんの数行の変更だけでこれだけ速度が変わるなんて不思議ですね。
PHPは7以降どんどんソースが整理され、高速化が進んできましたが、PHP8の今になってもこれほどの高速化の余地が残っているとは驚きです。
Author And Source
この問題について(【PHP8.1】new DateTimeZone()が170倍速くなったよ), 我々は、より多くの情報をここで見つけました https://qiita.com/rana_kualu/items/5fb8c9f254ae37591646著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .