PHP implode()vs sprintf()vs concat

时间:2015-02-09 11:36:46

标签: php benchmarking

生成字符串时哪个更快? implode()sprintf()或变量的常规连接?

为什么,你问?它可能不会引起你的兴趣来测试关于生成字符串的这么小的细节,因为谁在乎 ms 对吧?并不是的!当你必须从给定的变量中生成大量的字符串时,而不是当 0.00xms 的那些产生差异时。在我的情况下,它是从给定的前缀,内容类型和标识符生成缓存键

1 个答案:

答案 0 :(得分:-7)

所以我在一个非常简单的简约数据集上做到了这一点。

以下是结果,代码如下:

<强>结果

  
      
  • 评论:文章:123456 implode采取:0.00011706352233887
  •   
  • 评论:文章:123456 sprintf采取:2.4080276489258E-5
  •   
  • 评论:文章:123456摘要: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!";
}

请分享你的想法!