【问题标题】:How to benchmark code to see which runs faster如何对代码进行基准测试以查看哪个运行得更快
【发布时间】:2018-05-25 09:43:42
【问题描述】:
$datetime = new DateTime('2013-01-29');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

$datetime = new DateTime('2013-01-29');
$datetime->add(new DateInterval('P1D'));
echo $datetime->format('Y-m-d H:i:s');

谁能告诉我在 php 文件中的大型操作中哪个更快、更推荐并且占用更少的内存。我认为它的 DateInterval PID。有经验丰富的开发者吗?

【问题讨论】:

  • 肉眼肯定看不出来,所以把每个方法都放在百万次迭代的循环中,计算每个版本所用的时间。 microtime(true) 将以足够高的准确度返回当前时间。
  • @delboy1978uk 改变我的问题,好!现在在未来没有人可以搜索'PID'与'+1天'未来的速度
  • 如果您的问题保持原样,您的问题将被严重否决。
  • stackoverflow.com/questions/1219542/… 同类型的问题,但没人敢看。
  • 看起来 DateInterval 更快,见下文

标签: php datetime dateinterval


【解决方案1】:

要对代码进行基准测试,您可以使用microtime()

http://php.net/manual/en/function.microtime.php

<?php

echo 'modify: ';
$time = microtime(1);
for ($x = 0; $x < 10000; $x++) {
    $datetime = new DateTime('2013-01-29');
    $datetime->modify('+1 day');
}
echo $datetime->format('Y-m-d H:i:s'); 
$end = microtime(1);
$time = $end - $time;
echo $time . "\n";

echo 'interval: ';
$time = microtime(1);
for ($x = 0; $x < 10000; $x++) {
    $datetime = new DateTime('2013-01-29');
    $datetime->add(new DateInterval('P1D'));
}
$end = microtime(1);
$time = $end - $time;
echo $time . "\n";

这个输出:

modify: 0.039623975753784 
interval: 0.036103963851929

如您所见,在每次执行 10,000 次计算之后,DateInterval 是更快的代码。然而,这就是我所说的微优化!差别不大!

看到它在这里工作https://3v4l.org/pCecn

【讨论】:

  • 似乎 DateInterval 在 php 5.6 上比较慢
  • 事实上,5.6.30 以下的任何版本似乎都是如此。 5.6 将在年底 EOL!我建议如果你正在使用它,你升级!请在此处查看secure.php.net/manual/en/migration70.php
【解决方案2】:
$datetime = new DateTime('2013-01-29');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

这更快,因为在 DateInterval 中,您将需要使用难以阅读的间隔规范。

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2013-03-10
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多