PHP microtime()是正确的吗?

时间:2015-10-13 15:51:04

标签: php microtime

我使用microtime()来检查代码执行时间。 但是跟踪时间不正确似乎很奇怪。

所以在我的test.php中,我有以下代码:

$debug = true; 
$start = microtime(true); 
$newline = "<br/>";

...

if ($debug) {
    $time_elapsed_secs = microtime(true) - $start;
    $start = microtime(true);
    echo 'Step 1 Done: ' . $time_elapsed_secs . $newline; }

...

if ($debug) {
    $time_elapsed_secs = microtime(true) - $start;
    $start = microtime(true);
    echo 'Step 2 Done: ' . $time_elapsed_secs . $newline; }

然后当我在浏览器上打开URL时,它会在不到1秒内响应, 但它显示出一些奇怪的价值 第1步完成:0.0026565 第2步完成:9.8646454

怎么会发生这种情况? 我是否以错误的方式做某事?

2 个答案:

答案 0 :(得分:2)

我猜你从你的描述中留下了一个小细节。我认为你实际看到的输出更像是......

cdef extern from "cppFactory.h" namespace "cpplibrary":
    cdef cppclass CppFactory:
        CppFactory() except +

    # declare outside the class and use a string to specify name
    # unfortunately this doesn't seem to play well with namespace
    # so we need to specify it again
    cdef CppFactory& CppFactory_GetInstance "cpplibrary::CppFactory::GetInstance"()

cdef class PyFactory:
    cdef CppFactory* _thisptr
    def __cinit__(self):
        self._thisptr = &CppFactory_GetInstance()

当低于0.0001时,PHP会将浮点数置于科学计数法中。要使输出中的内容保持一致,请尝试将代码更改为以下内容,以十进制表示法显示microtimes。

Step 1 Done: 0.0026565
...
Step 2 Done: 9.8646454E-5

[注意:添加了usleep()调用以显示正在发生的事情。]

答案 1 :(得分:1)

这取决于两个步骤之间的代码。注释掉这两个步骤之间的代码(但是如果页面返回的时间少于1秒,你就是对的很奇怪。)

// Sleep for a while
usleep(100);

检查microtime是否测量正确的时间增量。