【问题标题】:How accurate is microtime()?microtime() 的准确性如何?
【发布时间】:2013-12-24 12:59:06
【问题描述】:

我正在测试我的 php 代码,以尝试查看哪些编码方法可以最快地执行。我想最终测试我所有需要测试的 php 代码,以尝试创建我可以执行的最快速执行的代码。我从我主页上的一个简单示例开始,使用 microtime() 记录 INSERT 语句执行前的时间和执行后的时间,然后将差异回显如下:

//Lots of code
$microtime1 = microtime();
$sql1=("INSERT INTO Table (value1,value2,value3,value4,value5,value6,value7) VALUES
('$value1','$value2', '$value3', '$value4', '$value5', '$value6', 'value7' )");

if (mysqli_query($sql1)) {
    $microtime2 = microtime();
    $Difference = $microtime2 - $microtime1;
    echo "<SCRIPT>
        alert('$Difference');
        location = 'home.php';
        </SCRIPT>";
} else {
    $message = 'The site is having some technical difficulties. Please try again!";
    echo "<SCRIPT>
        alert('$message');
        location = 'home.php';
        </SCRIPT>";
}
//More code

超过 10 次试验,我通过在相同的输入文本框中输入相同的 3 个字母字符串 ('ddd') 并单击相同的按钮(除我之外没有其他用户登录)来启动此查询,记录 $Difference 每次。我对数据中有多少差异感到惊讶。对于这 10 次试验,$Difference 的标准差是 $Difference 平均值的 40%。有没有更好的方法来做到这一点,我不知道?或者我是否必须为每个函数进行 10-20 次试验才能为我的其他代码获得 $Difference 的可用平均值?

【问题讨论】:

  • 实际上想要完成什么?减少查询时间的最佳方法是减少查询数量、优化带有索引的表并优化查询以使用这些索引。查询的不同可能是由于很多原因造成的,但我怀疑单个插入是否值得担心。如果您要执行数千次插入,最好尝试将它们组合到一个查询中。此外,始终建议使用预准备语句,尤其是在使用不同值多次重复类似查询时。
  • 要回答您的问题,微时间是准确的。查询实际上与平均值相差 40% 的可能性更大。
  • 除了减少查询次数和优化查询外,我还尝试编写执行速度最快的代码。考虑一下好奇心,因为我以前是一名实验化学家 :) 我对编码比较陌生,但我很难相信所有算法都是平等创建的。例如,要检查字符串是否是数组的成员,我可以使用函数 in_array 或者我可以使用结合比较运算符的 foreach 循环,将数组的每个成员与字符串进行比较以查看是否存在精确的匹配。我想要一个数字告诉我哪种方法更快!
  • 当然,在大多数情况下,最好使用最快的技术,但是在尝试微优化代码时,绝大多数情况下你都在处理百万分之一秒(不包括数据库查询)。换句话说,这不值得。无论您对字符串使用单引号还是双引号,使用 strpos 还是某种正则表达式都无关紧要。使用最好的工具来提高可读性、可维护性和功能性。其他任何事情都只是浪费时间。
  • 当然,如果你只是为了好奇,那就把自己搞砸吧!

标签: php microtime


【解决方案1】:

您所说的是剖析。尽管可以“自己动手”(并且在这方面您走在正确的轨道上),但仍有很多有用的东西可以为您完成繁重的工作。

如果你愿意,你总是可以按照你的建议做,并通过循环测试多次迭代来消除偏差,但是如果你想全面分析你的所有 PHP,我建议对这个问题使用“xdebug”答案: Simplest way to profile a PHP script

对我来说效果很好。

【讨论】:

    猜你喜欢
    • 2010-09-28
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2020-12-08
    • 2011-05-06
    相关资源
    最近更新 更多