当php手册说前者在内部使用后者时,为什么gmmktime()比mktime()更快?
根据 gmmktime() 描述在 PHP 手册中,它在内部使用 mktime() 。然而,当我运行以下代码时,mktime 循环的运行时间不到 9 秒,而 gmmktime Look 的运行时间不到 2 秒。怎么会这样呢?
<?php
$count = 1000000;
$startTime = microtime(true);
for ($i = 0; $i < $count; $i++)
{
mktime();
}
$endTime = microtime(true);
printf("mktime: %.4f seconds\n", $endTime - $startTime);
$startTime = microtime(true);
for ($i = 0; $i < $count; $i++)
{
gmmktime();
}
$endTime = microtime(true);
printf("gmmktime: %.4f seconds\n", $endTime - $startTime);
输出:
mktime: 8.6714 seconds
gmmktime: 1.6906 seconds
According to the gmmktime() description in the PHP manual, it uses mktime() internally. Yet when I run the following code, the mktime loop takes just under 9 seconds to run while the gmmktime look takes just under 2 seconds. How can this be?
<?php
$count = 1000000;
$startTime = microtime(true);
for ($i = 0; $i < $count; $i++)
{
mktime();
}
$endTime = microtime(true);
printf("mktime: %.4f seconds\n", $endTime - $startTime);
$startTime = microtime(true);
for ($i = 0; $i < $count; $i++)
{
gmmktime();
}
$endTime = microtime(true);
printf("gmmktime: %.4f seconds\n", $endTime - $startTime);
Output:
mktime: 8.6714 seconds
gmmktime: 1.6906 seconds
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最有可能的是,文档在如何实现
gmmktime()
方面对您撒了谎 - 或 它意味着 C 函数mktime()正在使用。
如果我们查看实际代码,
gmmktime()
和mktime()
都会传递到内部php_mktime
函数,该函数需要一个gmt
参数(对于gmmktime()
设置为1
)。如果gmt
为零,那么它必须做一些额外的工作(//
- 我添加的注释,其他来自原始代码):我怀疑您可能会发现的是,每次执行
mktime()
时,它都会重新打开时区描述文件来读取它并获取正确的时区/DST 偏移量。通过使用 gmmktime(),它通过使用 GMT 的内部空时区来跳过这一点 - 因此,速度更快。Most likely, the documentation is lying to you about how
gmmktime()
is implemented - or it means the C functionmktime()
is being used.If we look at the actual code, both
gmmktime()
andmktime()
pass through to an internalphp_mktime
function, which takes agmt
parameter (set to1
forgmmktime()
). Ifgmt
is zero, then it has to do some extra work (//
-comments I have added, others from original code):I suspect what you may find is that, every time you do
mktime()
, it reopens the timezone description file to read it and get the proper timezone/DST offsets. By usinggmmktime()
, it skips that by using an internal null timezone for GMT - thus, much faster.