【问题标题】:PHP implode() vs sprintf() vs concatPHP implode() vs sprintf() vs concat
【发布时间】:2015-02-09 11:36:46
【问题描述】:

生成字符串时使用哪个更快? implode()sprintf() 还是变量的常规串联?

你问为什么?你可能不会对生成字符串这样一个小细节感兴趣,因为谁在乎这一切都在 ms 中,对吧?并不真地!不是当你必须从给定的变量中生成大量字符串时,小 0.00xms 会有所作为。在我的例子中,它是根据给定的前缀、内容类型和标识符生成 缓存键

【问题讨论】:

  • 答案几乎可以肯定是简单的串联;但是为什么你不能自己测试呢?
  • @MarkBaker 我自己回答了这个问题并发布了结果。
  • 当然,还有echo "{$id}:{$type}:{$prefix}"; 可能比您的任何其他选项都快一点`
  • 每次 524288 次迭代(分配给变量而不是回显字符串)内爆耗时 0.3941 秒; sprintf 耗时 0.4779 秒; concat 耗时 0.2437 秒;在我的开发箱上插值花费了 0.1788 秒。

标签: php benchmarking


【解决方案1】:

所以我在一个非常简单、极简的数据集上完成了这项工作。

结果如下,代码如下:

结果

  • cmets:article:123456 内爆占用:0.00011706352233887
  • cmets:article:123456 sprintf 占用:2.4080276489258E-5
  • cmets:article:123456 concat 占用:6.9141387939453E-6
  • concat 最快!

代码

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}


// vars

$id = 123456;
$type = 'article';
$prefix = 'comments';


$implode_time_start = microtime_float();

echo implode(':', array($prefix, $type, $id));

echo "\n";

$implode_time_end = microtime_float();
$implode_time = $implode_time_end - $implode_time_start;

echo "implode took: $implode_time";

echo "-----\n\n\n";


$sprintf_time_start = microtime_float();

echo sprintf('%s:%s:%s', $prefix, $type, $id);

echo "\n";

$sprintf_time_end = microtime_float();
$sprintf_time = $sprintf_time_end - $sprintf_time_start;

echo "sprintf took: $sprintf_time";

echo "-----\n\n\n";


$concat_time_start = microtime_float();

echo $prefix.':'.$type.':'.$id;

echo "\n";

$concat_time_end = microtime_float();
$concat_time = $concat_time_end - $concat_time_start;

echo "concat took: $concat_time";

echo "------\n\n\n";


if ($implode_time < $sprintf_time || $implode_time < $concat_time) {
    echo "implode is fastest!";
} elseif ($concat_time < $sprintf_time) {
    echo "concat is fastest!";
} else {
    echo "sprintf is fastest!";
}

请分享你的想法!

【讨论】:

  • 将此添加到问题中。不要给出额外的细节作为答案。编辑您的问题
  • 老实说,我认为这是一个相当便宜的业力抓取,但无论如何,您至少应该多次运行每个测试,例如每次 1,000 次。一次是没有意义的,不会告诉你什么。
猜你喜欢
  • 1970-01-01
  • 2016-12-04
  • 2014-09-13
  • 2016-11-22
  • 2012-02-16
  • 2010-09-11
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多