我如何计时PHP的microtime本身? - php

我倾向于使用通常的方法检查PHP的速度。

<?php  
$timer_start = microtime(TRUE);  
/*
    some code here that I want to time 
*/  
$timer_end = microtime(TRUE);  
echo($timer_end - $timer_start);  
exit();  
?>

我该如何计时PHP的microtime函数本身的两次调用占用了多少时间?

php参考方案

答案是:“您不能-意思是:您的计时结果将不会100%准确!”。

事实是,逻辑已经暗示时间“ PHP的microtime函数本身的两次调用使用了多少时间”并没有100%准确的结果,因为您总是会最终包括(至少)在您的时间安排一个变量分配。

因此,这是您将获得的最接近的信息:

  <?php
  // start the timer
  $timer_start = microtime(TRUE);
  // Call microtime once (we want to calculate time wasted by microtime 2 calls)
  microtime(TRUE);
  // stop the timer and return the result
  echo(((microtime(TRUE) - $timer_start)*1000).' microseconds');
  exit();
  ?>

如果您看上面的代码,您会发现我没有使用$timer_end = microtime(TRUE);,因为那样会浪费时间在变量赋值上,可以通过直截了当地获取microtime调用的返回值并减去开始时间来避免:(microtime(TRUE) - $timer_start)

很好,但是没有办法使PHP记住开始时间而不将其分配给变量,这意味着:您将始终执行某种$timer_start = microtime(TRUE);,而无法避免初始化$timer_start变量–浪费时间。浪费的时间包含在我们的最终结果中。没有办法解决这个问题。

解释一下我的意思:我们可以通过替换来避免在时序结束时分配变量

$timer_end = microtime(TRUE);  
echo($timer_end - $timer_start); 

echo(microtime(TRUE) - $timer_start); 

但是我们不能对$timer_start = microtime(TRUE);做同样的事情。

无论我们如何尝试解决该问题,我们都将始终执行以下操作:

致电microtime(TRUE)
用返回值$timer_start初始化microtime(TRUE)的浪费时间(请参阅“ 1.”),
microtime(TRUE)什么都不做,
调用microtime(TRUE)并从中减去开始时间(请参阅“ 2.”)。

您需要点“ 2”。记住开始时间。您不能以任何方式跳过该变量分配或解决该问题。无论您做什么,都将始终在计时结果中包含变量分配。更糟糕的是:您永远不会知道在变量分配过程中浪费了多少时间,从而使结果不正确(更好:不是100%正确)。

为了帮助您理解它……关于问题以及我在此答案开头提供的代码,可以将问题可视化为:

解释它:microtime将知道返回它的值之前的确切时间–因此我们将不会获得返回的确切值(但非常接近)。然后,需要将返回值分配给一个变量,以便我们可以记住它-这需要花费更多时间,而这与我们实际想要的时间无关。

总结:您可以接近,但返回值永远不会是100%正确的。如果您已经了解了我上面所解释的内容,那么现在您将知道,无论您使用PHP进行计时如何,都将始终包括浪费在该“记住开始时间”变量初始化上的时间。

即使您创建一个只包含<?php microtime(); microtime(); ?>的脚本并使用外部程序……您也会注意到,除了将问题转移到外部程序之外,您什么都没有做。外部程序将具有可视化显示的相同问题,因为外部程序也必须通过初始化变量来记住启动时间,这意味着外部程序也将无法正确计时。

最后,我的问题最终变成了一个脑筋急转弯,以PHP为例来思考定时程序,循环和函数背后的逻辑。正如我的回答所解释的,使用哪种编码语言都没有关系,您总是会遇到同样的问题。

我将由您来决定是否应该考虑您的计时过程结果中包含的“浪费时间”,或者是否可以在您的情况下忽略它?但是就“精确”时间而言,不可否认的是,我们的结果中总是会包含变量分配所浪费的一小部分时间。可以获取时间但实际上并不属于我们真正想要的时间的最小时间跨度。因此,结果永远不会是100%准确的-因为如果您不动脑子就不会记住某件事。从这个角度来看,事情突然开始听起来很简单……不是吗? ;)

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…

将一个PHP对象发送到另一个PHP页面 - php

我想知道是否有一种方法可以将PHP对象发送到另一台计算机上的另一个PHP页面?例如-我实现了一个构造Trie的类。现在,在构造Trie之后,我想将对象发送到另一个PHP页面,以便它也可以访问该对象。可行的选择是将其包装到某种编码的JSON请求中,然后将其发送到可以使用jQuery将其中继到所需页面的页面吗?对不起,我对此绝对陌生!将感谢提供的任何帮助。干杯!…

在Codeigniter中以数组形式获取查询结果 - php

我有一个查询,如何获取结果作为数组? php大神给出的解决方案 像这样:$rs = $this->db->query(...); $array = $rs->result_array(); https://www.codeigniter.com/user_guide/database/results.html

PHP标头功能不起作用 - php

我曾经使用此功能从一个PHP页面重定向到另一个:header( 'Location: student.php?cnp='.$_REQUEST['name']) ; 在我的本地主机中,它确实可以工作,但是如果在Internet中对其进行测试,则不会重定向。我也尝试给出完整的路径(如http://.../student.p…

验证php中的javascript对象 - php

在我的用户界面中,用户可以构建一些javascript对象,例如:var box = { "width": "100px", "height": "200px", "click": function () { alert("You clicked t…