php。为啥函数的运行时间很大?

Posted

技术标签:

【中文标题】php。为啥函数的运行时间很大?【英文标题】:php. why function's running time is big?php。为什么函数的运行时间很大? 【发布时间】:2012-07-11 22:52:24 【问题描述】:

我在 php 中分析我的代码。问题是关于下一个功能:

// returns true if edge exists in the tree
protected function edgeExist( $srcNodeId, $firstToken ) 
    $result = array_key_exists( $srcNodeId, $this->edges )
              && array_key_exists( $firstToken, $this->edges[$srcNodeId]);
    return $result;

根据分析器,函数 edgeExist 消耗大约 10% 的运行时间,但函数 array_key_exists 消耗大约 0.2% 的运行时间。 为什么函数edgeExist 消耗这么多?

【问题讨论】:

尝试使用isset,它可能array_key_exists快。例如$result = isset($srcNodeId[$this->edges]) && isset($firstToken[$this->$this->edges[$srcNodeId]]);. 但无论如何array_key_exists 已经足够快了,它消耗了 0.2% 的运行时间。我不明白为什么edgeExist 消耗这么多。 【参考方案1】:

这可能更快,试试吧:

protected function edgeExist( $srcNodeId, $firstToken ) 
    return isset($this->edges[$srcNodeId][$firstToken]);

使用array_key_exists()isset() 时存在细微差别。看说明书。

【讨论】:

【参考方案2】:

您可以尝试比较个人资料结果

protected function edgeExist( $srcNodeId, $firstToken ) 
    $result = array_key_exists( $firstToken, array());
    return $result;

protected function edgeExist( $srcNodeId, $firstToken ) 
    $result = array_key_exists( $firstToken, $this->edges[$srcNodeId]);
    return $result;

我想也许 $this->edges[$srcNodeId] 是一个巨大的数组,php 需要对其进行一些内部魔法。

【讨论】:

我不知道怎么做,因为它会弄乱程序的逻辑,它不会运行 我不明白你搞乱逻辑的问题,我希望你没有处于生产模式;)。没关系,如果您不想更改 edgeExist,那么您可以添加 2 个新方法 edgeExist2、edgeExist3 然后调用它们并忽略返回的结果。【参考方案3】:

您可以通过以下方式测量每个部分的运行时间:

protected function edgeExist( $srcNodeId, $firstToken ) 
    $time = microtime();
    $result1 = array_key_exists( $srcNodeId, $this->edges )
    $time2 = microtime();
    $result2 = array_key_exists( $firstToken, $this->edges[$srcNodeId]);
    $time3 = microtime();
    $result = $result1 && $result2;
    $time4 = microtime();
    echo "calculating the first result took " . $time2 - $time1 . " microseconds\n".
    echo "calculating the second result took " . $time3 - $time2 . " microseconds\n".
    echo "calculating the && took " . $time4 - $time3 . " microseconds\n".
    return $result;

这应该能解开谜团;)

【讨论】:

以上是关于php。为啥函数的运行时间很大?的主要内容,如果未能解决你的问题,请参考以下文章

为啥调用未定义函数时没有 PHP 错误?

为啥 phpmyadmin 没有注意到我达到了最大 php 执行时间?

为啥sklearn kNN分类器运行得这么快,而我的训练样本和测试样本的数量很大

为啥 mysqlserver.lib 文件很大?这个文件在 wamp 堆栈中是必需的吗?

为啥我不能在我的 docker 容器中运行 phpinfo()?

为啥在本地运行php,好慢。