Carbon是一个简单的PHP API扩展,用于DateTime。我想知道我们是否可以通过安装composer来使用Carbon日期时间函数。
哪个更快,PHP日期时间函数还是Carbon?
Carbon是一个简单的PHP API扩展,用于DateTime。我想知道我们是否可以通过安装composer来使用Carbon日期时间函数。
哪个更快,PHP日期时间函数还是Carbon?
我对您关于DateTime和Carbon函数进行比较的评论进行了一些测试:
调用Carbon::now()
与new \DateTime()
各10万次:
<?php
require "Carbon.php";
use Carbon\Carbon;
$carbonTime = 0;
for ($i = 0; $i < 100000; $i++)
{
$start = microtime(true);
$time = Carbon::now();
$end = microtime(true);
$carbonTime += $end - $start;
}
echo "carbonTime: ".$carbonTime."\n";
$phpTime = 0;
for ($i = 0; $i < 100000; $i++)
{
$start = microtime(true);
$time = new \DateTime();
$end = microtime(true);
$phpTime += $end - $start;
}
echo "phpTime: ".$phpTime."\n";
运行 5 次的结果(即 5x 100,000 次调用):
$ php test.php
carbonTime: 5.1191372871399
phpTime: 0.42734241485596
$ php test.php
carbonTime: 5.05357670784
phpTime: 0.41754531860352
$ php test.php
carbonTime: 5.4670262336731
phpTime: 0.42954564094543
$ php test.php
carbonTime: 5.0321266651154
phpTime: 0.44966721534729
$ php test.php
carbonTime: 5.1405448913574
phpTime: 0.4540810585022
确认我最初写的内容:
由于Carbon继承了\DateTime,因此它对这些调用增加了一点开销(Carbon -> DateTime而不是直接DateTime)。 Carbon的主要目的不是比DateTime更快,而是通过常用函数增强其功能。
如果2022年或以后读到这篇文章的人,PHP的速度已经有了很大的提升,在PHP 8.1中,ccKep代码的结果将是:
$ php test.php
carbonTime: 0.72775316238403
phpTime: 0.27025842666626
$ php test.php
carbonTime: 0.75773358345032
phpTime: 0.27719449996948
$ php test.php
carbonTime: 0.75334858894348
phpTime: 0.26076078414917
$ php test.php
carbonTime: 0.75232911109924
phpTime: 0.26331186294556
$ php test.php
carbonTime: 0.75696325302124
phpTime: 0.27505803108215
有一点额外的开销。但是使用操作方法时,这种开销开始增加。
我添加了一些操作代码:
<?php
require "Carbon.php";
use Carbon\Carbon;
$carbonTime = 0;
for ($i = 0; $i < 100000; $i++)
{
$start = microtime(true);
$time = Carbon::now();
$time->addMinute();
$end = microtime(true);
$carbonTime += $end - $start;
}
echo "carbonTime: ".$carbonTime."\n";
$phpTime = 0;
for ($i = 0; $i < 100000; $i++)
{
$start = microtime(true);
$time = new \DateTime();
$time->add(new DateInterval('PT1M'));
$end = microtime(true);
$phpTime += $end - $start;
}
echo "phpTime: ".$phpTime."\n";
$carbonPhpTime = 0;
for ($i = 0; $i < 100000; $i++)
{
$start = microtime(true);
$time = Carbon::now();
$time->add(new DateInterval('PT1M'));
$end = microtime(true);
$carbonPhpTime += $end - $start;
}
echo "carbonPhpTime: ".$carbonPhpTime."\n";
结果:
$ php test.php
carbonTime: 1.9114277362823
phpTime: 0.33648467063904
carbonPhpTime: 0.85358047485352
$ php test.php
carbonTime: 2.0271127223969
phpTime: 0.35125756263733
carbonPhpTime: 0.90319967269897
$ php test.php
carbonTime: 1.8688952922821
phpTime: 0.33922410011292
carbonPhpTime: 0.85987377166748
$ php test.php
carbonTime: 1.8911855220795
phpTime: 0.33247566223145
carbonPhpTime: 0.86109066009521
$ php test.php
carbonTime: 1.8757562637329
phpTime: 0.33344697952271
carbonPhpTime: 0.84496641159058
如您所见,当进行操作时,差异会增加。因此,如果您需要大量进行日期/时间操作,则可能会很繁琐。
您还可以看到我添加了一个组合,在该组合中,我使用Carbon实例化了一个DateTime对象(因为Carbon扩展了DateTime类),同时使用DateTime方法进行操作,以查看是否有任何差异,因为“setTestNow()”在进行单元测试时非常方便。
我的建议是在选择Carbon时要非常小心。如果您不同时使用大量Carbon(例如在简单的网站上),则可以充分利用它,但是当需要快速操作大量数据时,我的建议是:使用DateTime或仅使用Carbon :: now()以便于测试,并继续使用DateInterval的易于使用的方法。
\DateTime
,按常识使用\DateTime
直接调用相同或稍微慢一点的函数。 Carbon的好处在于添加了功能/便利功能。 - ccKep